2010-01-13 108 views
1

我試圖序列化我的自定義集合UserDataCollection,由UserData對象製成。我想知道在實現序列化時,實際對象(UserData)是否還需要具有[Serializable]屬性並從ISerializable接口繼承?自定義對象集合序列化

我想序列化集合中的每個對象(UserData),它的所有屬性和變量。

我有這樣的時刻:

public class UserData : IEquatable<UserData>, IUser 
{ 
/// some properties methods 
} 

    [Serializable()] 
    class UserDataCollection : IEnumerable<UserData>, ISerializable 
    { 
     static List<UserData> Collection = new List<UserData>(); 
     IUser current; 

     #region Properties 
     public UserData Current 
     { 
      get 
      { 
       return (UserData)current; 
      } 

      set 
      { 
       current = value; 
      } 
     } 
     #endregion 


     #region Constructors 
     public UserDataCollection(IUser userdata) 
     { 
      this.current = userdata; 
     } 

     /// <summary> 
     /// Deserialization Constructor 
     /// </summary> 
     /// <param name="SerializationInfo">This object holds a name-value pair for the    properties to be serialized</param> 
     /// <param name="item"></param> 
     public UserDataCollection(SerializationInfo serializationInfo, StreamingContext ctxt) 
     { 
      Current = (UserData)serializationInfo.GetValue("UserData", typeof(UserData)); <-- Can I just do this on the UserData object property or does it itself also need to implement ISerializable? 
     } 
     #endregion 

//more methods here... 
} 

收集將使用二進制序列進行序列化。

回答

2

是的,你的UserData類應該被標記爲Serializable。它不必顯式繼承ISerializable,但是如果你想自定義序列化,那麼你當然可以。

SerializableAttribute

應用SerializableAttribute 屬性的類型,以指示該類型的 實例可以 串行化。公共語言 運行時會拋出SerializationException 如果對象 的圖形中有任何類型被序列化,則不會應用 SerializableAttribute屬性 。