次の例外が発生しました。
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
このフィールドの属性を使用する場合、マイナスの影響はありますか?
言い換えれば、その意味は何ですか?