簡體   English   中英

由於復雜的對象,Workflow SerializationException

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM