Сериализация классов, содержащих дженерики с обратной совместимостью - PullRequest
2 голосов
/ 16 апреля 2009

Я пытаюсь найти лучший способ обработки сериализации в моей программе.

Я хочу сериализовать приватные поля (поэтому XML сериализатор не вариант) Я хочу сериализовать универсальные типы, такие как Bindinglist (SoapSerializer не вариант) Я также хочу предоставить некоторый уровень поддержки для возможности десериализации объекта из предыдущих версий моей программы.

Таким образом, все, что мне остается, это BinarySerializer и реализация интерфейса ISerializable для обеспечения прямой совместимости.

Это правильно?

Примечание: Я должен сказать, что нашел этот проект. Однако проект казался мертвым, и я не мог заставить его работать (ошибка файла отсутствует) http://sourceforge.net/project/showfiles.php?group_id=196509

Ответы [ 2 ]

1 голос
/ 16 апреля 2009

С BinaryFormatter вы можете использовать [OptionalField], но это все еще очень хрупкий .

Как насчет protobuf-net ? Делает все это и не имеет проблем с версиями, связанных с BinaryFormatter. Поскольку он основан на формате Google "протокольные буферы", он предназначен , чтобы быть устойчивым к версии и расширяемым (раскрытие: я автор, поэтому я могу быть предвзятым).

В качестве альтернативы, DataContractSerializer поддерживает сериализацию поля; просто установите [DataMember] для ваших полей вместо свойств (требуется .NET 3.0).

0 голосов
/ 16 апреля 2009

Да, вам нужно реализовать ISerializable.

Ключевыми моментами являются следующие

  • Реализация GetObjectData (информация SerializationInfo, контекст StreamingContext). Здесь вам нужно добавить пары ключей в информационный объект.
  • Реализация конструктора сериализации MyClass (информация SerializationInfo, контекст StreamingContext). Здесь вам нужно получить значения из информационного объекта.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...