2017-01-27 10 views
1

Мне нравится BinaryFormatter, он легкий (2 строки кода). Но я чувствую, что он несет некоторый риск осложнений.BinaryFormatter альтернатива поддержке версий бесшовных моделей?

Особенно, когда речь идет о различных версиях приложений с несколькими разными моделями (переименованные/удаленные/перемещенные свойства/классы по версиям).

Что является лучшей альтернативой?

Учитывая легкий, низкоуровневый планшет, но с некоторым вариантом управления версиями должным образом без особых накладных расходов.

+0

Кажется, я могу пойти с ['SerializationBinder'] (https://msdn.microsoft.com/en-us/library/system.runtime.serialization.serializationbinder (v = vs.110) .aspx) – Geri

+0

Еще не ясно, если я должен сделать что-то заранее или нет. – Geri

ответ

1

Основываясь на вашем описании, вы нарушаете правила обратной совместимости. Это будет трудно, если не невозможно передать эти случаи в двоичной сериализации.

Never remove a serialized field 
Never change the name or type of a serialized field 
When adding a new field, mark it with the OptionalField attribute 

Если вы хотите обрабатывать каждый случай под солнцем, где поля могут изменять типы, имена, местоположение и т.д. Вы бы лучше с Json или XML, где первый тег требуется, чтобы быть версия и он никогда не изменится. Затем вы узнаете, как обрабатывать остальную часть файла.

Вы можете сделать то же самое с бинарной сериализации, но не в любом автоматическом режиме, и вы будете в конечном итоге с кодом, как:

readByte() 
If ver 1 readInt() 
If ver 2 readInt(), readString() 
readArray() 
If ver 4 readBool() 
If ver 3 readDouble() 

и т.д., если вы не хотите, чтобы следовать выше правила о допустимости версий, двоичные файлы не должны быть вашим первым выбором.

+0

Звучит как переименование может быть сделано как: я добавляю [НеобязательныйField] в новое поле и оставляю прежнее поле навсегда. – Geri

+0

Но в случае десериализации версии foremer, где я могу установить значение OptionaField? – Geri

+0

Не переименование людей, поскольку требования к классу меняются с течением времени? Как это может быть проблемой? – Geri

 Смежные вопросы

  • Нет связанных вопросов^_^