Переименование полей, затем десериализовывающих в C#

Установите ширину графика. Это единственный вариант, который работал для меня.

chart: {
            type: 'line',
            width: 835
        },
6
задан Tim Gradwell 2 June 2009 в 23:07
поделиться

4 ответа

Вы можете попробовать оставить старый calss с единственной целью регидратации, а затем просто скопировать нужные поля в новый класс. Все еще немного болезненно, но должно сработать.

2
ответ дан 17 December 2019 в 07:08
поделиться

Да, это проблема сериализаторов на основе полей. Вы можете использовать пользовательский Binder или «суррогат сериализации», чтобы избежать реализации ISerializable , но это исправление только для каждого случая.

Я обсуждал эта тема (в контексте обфускаторов и автопропов) здесь . Мой совет: не используйте BinaryFormatter для сохранения данных между версиями ... для этого посмотрите на сериализаторы на основе контрактов:

  • XmlSerializer
  • DataContractSerializer
  • или для двоичных файлов, вещи например, protobuf-net

Ничего из этого не поможет вам сегодня , но в будущем может помочь вам в разработке дизайна.

2
ответ дан 17 December 2019 в 07:08
поделиться

Я использовал для этого класс SerializationBinder до

http://msdn.microsoft.com/en-us/library/system.runtime.serialization.serializationbinder.aspx

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

0
ответ дан 17 December 2019 в 07:08
поделиться

Что, если вы просто измените модификатор доступа для этого свойства на частный, а затем получите общедоступное свойство с новым именем, которое по сути является оболочкой для старого. Таким образом, вы все равно сможете десериализовать (Я ДУМАЮ), но любой, кто использует этот класс, не узнает о старом имени. Просто мысль ...

0
ответ дан 17 December 2019 в 07:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: