У меня есть объект со свойством, реализованным как
public String Bla {get;set;}
После изменения реализации на что-то вроде
private String _bla;
public String Bla
{
get { return _bla; }
set { _bla = value; }
}
при десериализации это свойство оказывается пустым.
у меня есть много сериализованных данных из старой реализации, и я хотел бы загрузить их с новой реализацией
есть ли способ изменить внедрение, чтобы оно было совместимо со старыми двоичными файлами?
ИЗМЕНИТЬ:
Некоторые люди могут столкнуться с той же проблемой, поэтому вот мое хакерское решение:
автоматически сгенерированные поля имеют соглашение об именах, которое является недопустимым кодом С#:
[CompilerGenerated]
private string <MyField>k__BackingField;
[CompilerGenerated]
public void set_MyField(string value)
{
this.<MyField>k__BackingField = value;
}
[CompilerGenerated]
public string get_MyField()
{
return this.<MyField>k__BackingField;
}
быстрое и грязное исправление для меня состояло в том, чтобы создать приватное резервное поле с именем xMyFieldxK__BackingField
в исходном коде,
и исправить сериализованные двоичные данные, заменив все вхождения <MyField>
на xMyFieldx
перед десериализацией