Десериализация в классе Custom Collection - PullRequest
0 голосов
/ 28 января 2012

У меня есть пользовательская коллекция, которая добавляет функциональность в класс 'ArrayList'.

Вот код из класса:

    [Serializable]
    class Coll : ArrayList
    {

       public void Save(string path)
            {
                BinaryFormatter formatter = new BinaryFormatter();
                FileStream fsOut = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write);
                formatter.Serialize(fsOut, this);
                fsOut.Dispose();
            }
    }

Я сейчас пытаюсь десериализовать файл и заполнить коллекцию содержимым файла. В основном противоположность моего Save(string path) метода.

Это то, что у меня так далеко:

public void Read(string path)
            {
                BinaryFormatter formatter = new BinaryFormatter();
                FileStream fsIn = new FileStream(path, FileMode.Open, FileAccess.Read);
                formatter.Deserialize(fsIn);
                fsIn.Dispose();
            }

Как мне заполнить коллекцию десериализованным содержимым?

Ответы [ 2 ]

2 голосов
/ 28 января 2012

BinaryFormatter не поддерживает сериализацию в существующего объекта.Вы можете десериализовать его в новый список - просто сделайте его static методом и верните значение.

Другие мысли:

  • не используйтеArrayList, если вы не в .net 1.1: List<T> будет предпочтительнее
  • нет необходимости создавать подклассы;достаточно метода расширения
  • Я не рекомендую BinaryFormatter для этого ... Или что-нибудь еще на самом деле
1 голос
/ 28 января 2012

Метод BinaryFormatter.Deserialize () создает новый объект, инициализирует его данными из потока и возвращает его. Следовательно, вы должны использовать возвращаемое значение и использовать его как новый ArrayList объект. Таким образом, метод Read переходит в статический метод или - как предложено diggingforfire - в другой класс.

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