Сериализация IEnumerator <T>, созданная с использованием return yield - PullRequest
5 голосов
/ 02 июля 2010

Есть ли способ сериализации (используя BinaryFormatter) IEnumerator<T>, который создается при использовании yield return s?Автогенерируемый класс не помечен Serializable.

Ответы [ 3 ]

3 голосов
/ 02 июля 2010

Какой класс вы используете для реализации IEnumerable<T>? List<T> должен сериализоваться ОК.

Попробуйте вызвать ToList() для вашей коллекции перед сериализацией.

3 голосов
/ 02 июля 2010

Сгенерированный компилятором enumerable не имеет примененного к нему атрибута [Serializable], поэтому нет, из коробки вы не можете этого сделать.

Вы должны спросить себя: «Почему я использую доходность здесь и что это означает, когда этот объект десериализован?»

Если это удобно, вы можете использовать его для заполнения типа, который можно сериализовать. Если вы используете его для выполнения тяжелой работы ленивым образом, вы можете рассмотреть возможность изменения своего дизайна для сериализации / десериализации информации, необходимой для выполнения этой тяжелой работы.

0 голосов
/ 02 июля 2010

Просто итерируйте перечислитель и сериализуйте каждый возвращенный экземпляр.

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