大声で考えているだけですが、COMが物事を「バージョン管理」するために使用した方法に似たものが機能する可能性があります。
[Serializable]
public class Data
{
public string Field1 {get; set;}
}
[Serializable]
public class Data2
{
public Data2() { _version1 = new Data();}
[NonSerialized]
private Data _version1;
public string Field1
{
get { return _version1.Field1;}
set { _version1.Field1 = value;}
}
public int Field2 {get; set;}
}
[Serializable]
public class Data3
{
public Data3() { _version2 = new Data2();}
[NonSerialized]
private Data2 _version2;
public string Field1
{
get { return _version2.Field1;}
set { _version2.Field1 = value;}
}
public int Field2
{
get { return _version2.Field2;}
set { _version2.Field2 = value;}
}
public double Field3 {get; set;}
}
実は、目の前にレイアウトされたものを見ているので、理想的な解決策に近いとは言えません。それはすぐに「バージョン番号地獄」の急増につながります。これは最近のCOMとよく似ています(さまざまなDirectXインターフェイス名をいつかチェックしてください)
とはいえ、それは潜在的な答えなので、そのままにしておきます。