После сериализации унаследованного класса C2 поток выглядит так:
0x5a 0x03
0x08 0x97 0x01
0x08 0x96 0x01
Я не могу понять, что это первая группа байтов (5a 03)? Я полагал, что это должны быть только вторые и третьи, которые представляют значения Z1 и Z2?
Мой код:
[ProtoContract]
class C1
{
[ProtoMember(1, DataFormat = DataFormat.Default)]
public int Z1 { get; set; }
}
[ProtoContract]
class C2 : C1
{
[ProtoMember(1, DataFormat = DataFormat.Default)]
public int Z2 { get; set; }
}
public static void Main()
{
MemoryStream stream = new MemoryStream();
ProtoBuf.Meta.RuntimeTypeModel.Default.Add(typeof(C1), true).AddSubType(11, typeof(C2));
C2 c2 = new C2() {Z1 = 150, Z2 = 151};
Serializer.Serialize(stream, c2);
}
C1
(а не подклассC2
), или новый подклассC3
C1
илиC2
. protobuf-net может справиться с этим. Если ты... 14.12.2012message C2 { Z1 = 1; Z2 = 2; }
- вы можете сделать это довольно легко, но: тогда это не на самом деле не поддерживают наследование в обычном значении этого слова. 14.12.2012