2013-05-03 5 views
2

Я хочу сохранить и восстановить некоторые параметры, которые в настоящее время определены как объекты POCO, и хотите, чтобы операции сохранения/загрузки работали, даже если изменение происходит в формате сохраняемых данных, неизвестные данные игнорируются и новые данные добавляются правильно.Лучший способ для надежной сериализации .NET

Какую структуру я могу использовать? Я знаю, что не могу использовать сериализацию XML, потому что она хрупкая и ломается, когда видит в структуре данных непревзойденный элемент. Что я могу использовать вместо этого, «будет просто работать»?

ответ

2

Возможно, вы захотите попробовать сериализацию JSON, она может сделать то, что вам нужно.

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

2

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

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

Таким образом, лучше всего справиться с этим через собственный механизм сериализации. Потому что именно там вы введете «что, если этого больше не существует, но меня это не волнует».

Нет решения «просто работа», ИМХО. Потому что «это должно существовать независимо от того, какая версия» является «чужим человеком», я могу просто пропустить эту информацию в этой новой версии ».

4

Хотя это XML и он не может обрабатывать все изменения, DataContractSeralizer может обрабатывать добавление/удаление свойств. Он также имеет обратные вызовы для работы с неизвестными данными.

http://msdn.microsoft.com/en-us/library/ms731138.aspx

Вы всегда можете создать свой собственный, но это отнимает гораздо больше времени.

+0

Upvote за то, что вам было полезно. – granadaCoder

+0

Не только имеет чрезвычайно простые крючки для подготовки/очистки данных после/до де-сериализации и может обрабатывать переименования, он может даже поддерживать круговые поездки через (более старые) версии объектов данных, в которых отсутствуют некоторые элементы (ExtensionDataObject). – linac

+0

Не требует ли DCS атрибутов '[DataMember]' повсюду? У меня есть сотни свойств, мне нужно что-то, что может прозрачно сериализовать вещи без каких-либо ручных удержаний. –

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