Сериализация коллекции пользовательских объектов - PullRequest
1 голос
/ 13 января 2010

Я пытаюсь сериализовать свою пользовательскую коллекцию 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...
}

Коллекция будет сериализована с использованием двоичной сериализации.

1 Ответ

2 голосов
/ 13 января 2010

Да, ваш класс UserData должен быть помечен как Serializable. Он не должен явно наследоваться от ISerializable, но если вы хотите настроить сериализацию, тогда, конечно, вы можете.

С Сериализуемый атрибут :

Применить атрибут SerializableAttribute атрибут типа, чтобы указать, что экземпляры этого типа могут быть сериализованная. Общий язык время выполнения выдает исключение SerializationException если какой-либо тип в графе объектов сериализация не имеет Атрибут SerializableAttribute приложенное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...