0

次の例外が発生しました。

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); }
    }

    ...

私が見つけた2つのブログ投稿があります:

この問題を解決する方法が1つあります。複雑なメンバーオブジェクトをグローバル変数としてではなく、ローカル変数として使用します。つまり、グローバルレベルではなくローカル(workflowProperties.Web)でSPWebを宣言します。

したがって、使用しているすべてのメソッドでspWebを再宣言する必要があります。これはかなり醜いと思います。

私も試したことはこれです:

...
[NonSerialized]
private SPWeb spWebtemp;

private SPWeb spWeb
{
    get { return spWebtemp ?? (spWebtemp = workflowProperties.Web); }
}
...

==>これ以上のシリアル化例外はありません!

NonSerializedこのフィールドの属性を使用する場合、マイナスの影響はありますか?
言い換えれば、その意味は何ですか?

4

2 に答える 2

1

これも機能するようです (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 オブジェクトを初期化しないのはなぜですか。それとも、ワークフローでは不可能ですか?

于 2011-12-19T14:50:19.833 に答える
1

なぜあなたは単純にやらないのですか:

private SPWeb spWeb
{
    get { return workflowProperties.Web; }
}

spweb オブジェクトの遅延読み込みは、プロパティ プロパティによって既に処理されています。

于 2011-06-15T08:47:16.907 に答える