2011-10-06 16 views
3

現在、SessionState = Stateserverを使用するサーバーでホストされているWebプロジェクトのオブジェクトをシリアル化しようとしています。StateServerのlinq2sqlオブジェクトを含むオブジェクトをシリアル化します

オブジェクトには[Serializable]とマークされましたが、オブジェクトにはLINQ2SQL DataContextの一部であるオブジェクトが含まれています。私はすでにDataContractSerializerでこれをシリアル化することは可能だが、それを行う正しい場所はどこですか?

を実装し、GetObjectData()関数内にNodeObjectをシリアル化してSerializationInfoに追加するだけですか?良いアプローチについての任意のアイデア?

答えて

0

今すぐ完了してください。 Linqオブジェクトに[Serializable]が含まれ、ISerializableインターフェイスが含まれているオブジェクトをマークしました。

protected BusinessObjectBase(SerializationInfo info, StreamingContext context) 
{ 
    this.DBOItem = new T(); 
      PropertyInfo[] properties = this.DBOItem.GetType().GetProperties(); 
      SerializationInfoEnumerator enumerator = info.GetEnumerator(); 

      while (enumerator.MoveNext()) 
      { 
       SerializationEntry se = enumerator.Current; 
       foreach (PropertyInfo pi in properties) 
       { 
        if (pi.Name == se.Name) 
        { 
         pi.SetValue(this.DBOItem, info.GetValue(se.Name, pi.PropertyType), null); 
        } 
       } 
      } 
} 
DBOItemは、デシリアライゼーションのために含まれる必要があるCTORはこのようになります私のLinqObject

public void GetObjectData(SerializationInfo info, StreamingContext context) 
    { 
     PropertyInfo[] infos = this.DBOItem.GetType().GetProperties(); 
     foreach (PropertyInfo pi in infos) 
     { 
      bool isAssociation = false; 
      foreach (object obj in pi.GetCustomAttributes(true)) 
      { 
       if (obj.GetType() == typeof(System.Data.Linq.Mapping.AssociationAttribute)) 
       { isAssociation = true; break; } 
      } 
      if (!isAssociation) 
      { 
       if (pi.GetValue(this.DBOItem, null) != null) 
       { 
        info.AddValue(pi.Name, pi.GetValue(this.DBOItem, null)); 
       } 
      } 
     } 
    } 

です