次の 3 つのクラスがあるとします。
[ProtoContract]
[ProtoInclude(10, typeof(FirstType))]
[ProtoInclude(20, typeof(SecondType))]
public class Base
{
[ProtoMember(1)]
public int ClassId {get;set;}
}
public class FirstClass : Base
{
...
}
public class SecondClass : Base
{
...
}
また、(基本クラスの) クラス ID と、一致する子クラスの型の間には関係があります。例えば、
var obj1 = new FirstClass() {ClassId = 1}
var obj2 = new SecondClass() {ClassId = 2}
これらのオブジェクトをシリアライズしたとしましょう。問題は、 ClassId フィールドを調べて、クラス Id 値に基づいてシリアル化された protobuf を逆シリアル化する良い方法はありますか? つまり、シリアライズされた protobuf の classId の値が 1 の場合、FirstClass を使用して残りのストリーム バイトをデシリアライズします。
ありがとう!