Допустим, у нас есть следующие три класса:
[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
{
...
}
И есть связь между идентификатором класса (в базовом классе) и типом соответствующего дочернего класса. Например,
var obj1 = new FirstClass() {ClassId = 1}
var obj2 = new SecondClass() {ClassId = 2}
Теперь давайте предположим, что мы сериализовали эти объекты. Вопрос в следующем: есть ли хороший способ десериализовать сериализованный protobuf на основе значения идентификатора класса, просматривая поле ClassId? т. е. если значение classId в serailized protobuf равно 1, то используйте FirstClass для десериализации оставшихся байтов потока.
Благодарность!