сериализовать каждый объект в коллекции объектов - PullRequest
1 голос
/ 13 января 2010

У меня есть этот код для сериализации моей пользовательской коллекции объектов UserData. Однако свойство current представляет только элемент, используемый в данный момент в коллекции, поэтому оно сериализует только этот один объект.

Я хочу, чтобы все объекты сериализовались в моей коллекции, как бы я поступил в реализации GetObjectData моей Коллекции?

        public void GetObjectData(SerializationInfo info, StreamingContext ctxt)
        {
            // Add the userdata object to SerializationInfo object
                info.AddValue("UserData", current);
        }

это мой конструктор десериализации, я не уверен, что тогда он также десериализует каждый объект в коллекции.

public UserDataCollection(SerializationInfo serializationInfo, StreamingContext ctxt)
        {
            UserData data = (UserData)serializationInfo.GetValue("UserData", typeof(UserData));
              // Add to objects existing collection
            this.Add(data);
        }

1 Ответ

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

Как вы держите свои объекты за кулисами? У вас где-нибудь есть поле List<T>? Просто сериализуйте / десериализуйте это, и пусть это беспокоится об этом. Честно говоря, это должно произойти просто , если вы пометите пользовательскую оболочку коллекции как [Serializable] и отметите все ненужные поля (например, current) как [NonSerialized] (т.е. без необходимости реализации ISerializable).

Обратите внимание, что в большинстве случаев я склонен советовать против BinaryFormatter; это нормально для отправки кратковременных (временных) сообщений, но я не советую использовать его для целей хранения (в файле или в базе данных); Вы можете получить много проблем с версиями, пытаясь десериализовать позже.

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