![](/img/trans.png)
[英]SerializationException of Avro Date Object (Date LogicalType)
[英]Workflow SerializationException because of complex object
我得到以下异常:
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); }
}
...
我发现有两篇博文:
有一个解决方案可以解决这个问题: 没有复杂的成员对象作为全局变量 ,而是作为局部变量 - 即在本地声明SPWeb(workflowProperties.Web)而不是在全局级别。
因此,我必须在我正在使用的每种方法中重新声明spWeb - 我认为这相当丑陋。
我也尝试过这个:
...
[NonSerialized]
private SPWeb spWebtemp;
private SPWeb spWeb
{
get { return spWebtemp ?? (spWebtemp = workflowProperties.Web); }
}
...
==>没有更多的序列化异常!
在此字段上使用NonSerialized
属性时是否有任何负面影响?
换句话说 - 有什么含义?
你为什么不这样做:
private SPWeb spWeb
{
get { return workflowProperties.Web; }
}
spweb对象的延迟加载已由properties属性处理
看起来它也可以工作(OnDeserialized属性):
http://msdn.microsoft.com/en-us/library/system.runtime.serialization.ondeserializedattribute.aspx
[编辑]
我没有测试过这个,但我想的是这样的:
public sealed partial class MyWorkflow : StateMachineWorkflowActivity
{
public SPWorkflowActiviationProperties workflowProperties = new SPWorkflowActivationProperties();
[NonSerialized()]
private SPWeb spWebtemp;
private SPWeb spWeb
{
get { return spWebtemp ?? (spWebtemp = workflowProperties.Web); }
}
[OnDeserialized()]
internal void OnDeserializedMethod(StreamingContext context)
{
spWebTemp = workflowProperties.Web;
}
...
另外,为什么不在构造函数中初始化spWebtemp对象,或者工作流无法实现?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.