2010-01-13 4 views
1

UserData 개체로 만들어진 사용자 지정 컬렉션 UserDataCollection을 serialize하려고합니다. 직렬화 구현시 실제 객체 (UserData)에도 [Serializable] 속성이 있어야하고 ISerializable 인터페이스를 상속해야합니까?사용자 지정 개체 컬렉션 serialization

컬렉션의 각 개체 (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을 throw합니다. 의 그래프에있는 어떤 유형이 직렬화되는 경우 SerializableAttribute 속성 이 적용되지 않습니다.

관련 문제