我得到以下异常:
System.Workflow.Runtime.Hosting.PersistenceException:在程序集“Microsoft.SharePoint,Version=12.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c”中键入“Microsoft.SharePoint.SPWeb”未标记为可序列化。—> System.Runtime.Serialization.SerializationException:在程序集“Microsoft.SharePoint,Version=12.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c”中键入“Microsoft.SharePoint.SPWeb”未标记为可序列化
错误来自这里:
public sealed partial class MyWorkflow : StateMachineWorkflowActivity
{
public SPWorkflowActiviationProperties workflowProperties = new SPWorkflowActivationProperties();
private SPWeb spWebtemp;
private SPWeb spWeb
{
get { return spWebtemp ?? (spWebtemp = workflowProperties.Web); }
}
...
我找到了两篇博文:
这个问题有一个解决方案:不要将复杂的成员对象作为全局变量,而是作为局部变量 - 即在本地(workflowProperties.Web)而不是在全局级别声明 SPWeb。
因此,我必须在我使用的每种方法中重新声明 spWeb - 我认为这很丑陋。
我也尝试过的是:
...
[NonSerialized]
private SPWeb spWebtemp;
private SPWeb spWeb
{
get { return spWebtemp ?? (spWebtemp = workflowProperties.Web); }
}
...
==> 没有更多的序列化异常!
NonSerialized
在此字段上使用属性时是否有任何负面影响?
或者换句话说 - 有什么影响?