次のように実装されたプロパティを持つオブジェクトがあります
public String Bla {get;set;}
実装を次のようなものに変更した後
private String _bla;
public String Bla
{
get { return _bla; }
set { _bla = value; }
}
デシリアライズ時に、このプロパティは空になります。
古い実装からのシリアル化されたデータがたくさんあり、新しい実装でそれらをロードしたいと思います
古いバイナリファイルと互換性があるようにインペンションを変更する方法はありますか?
編集:
一部の人々は同じ問題に遭遇するかもしれないので、これが私のハックな解決策です:
自動生成されたフィールドには、無効なc#コードである命名規則があります。
[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
、ソースで呼び出されるプライベートバッキングフィールドを作成することでした。
シリアル化されたbinarydataにパッチを適用するために、すべてのオカレンスを<MyField>
デxMyFieldx
シリアライズ前にに置き換えます