[DataContract]
public class Hoge
{
[DataMember(Order = 0)]
public int MyProperty1 { get; set; }
}
[DataContract]
public class HogeHoge : Hoge
{
[DataMember(Order = 1)]
public int MyProperty2 { get; set; }
[DataMember(Order = 2)]
public int MyProperty3 { get; set; }
}HogeHogeのシリアライズ時の表現は[Prop1, Prop2, Prop3]。
しかしこれだと、Hogeにたいしてプロパティを追加したりするのが辛い(というかもはや実質不可能……)
できれば[DataMember(Order = 0)]MyProperty2, [DataMember(Order = 1)]MyProperty3 で書きたい。そこでHogeHogeをシリアライズした時に、まっ平らになるのではなく、継承関係も維持したままシリアライズするとかどうでしょう?
[Prop1, [Prop2, Prop3]] になるとか……。
これだと、基底クラスにコレクション型のプロパティを追加すると破綻しません?
Order を相対値として解釈する……というのはどうでしょう。vtable みたいに末尾に付けていく。
ただ、逆シリアル化失敗時にキツイので、map がオススメですかね(そう言えば、特定のクラスに対して array または map でシリアル化することを強制する方法がないですね……)