Protobuf-сеть, создающая typemodel с интерфейсом и абстрактным базовым классом
Я пытаюсь сериализовать модель, используя отличный Protobuf-NET. Я не могу использовать атрибуты (объекты неизвестны во время компиляции), поэтому я создал TypeModel. Моя объектная модель состоит из классаTestDataObjectэтот класс имеет свойствоITestDataExtension, Абстрактный базовый классTestDataExtensionBase реализует этот интерфейс и классTestDataExtension (myDataObjectExtA в коде) наследуется от этого базового класса.
Моя TypeModel построена так:
System.IO.MemoryStream tmpMemoryStream = new System.IO.MemoryStream();
RuntimeTypeModel model = TypeModel.Create();
MetaType basetype = model.Add(typeof(TestDataObject), true);
MetaType interfaceType = model.Add(typeof(ITestDataExtension), true);
//MetaType extBaseType = interfaceType.AddSubType(100, typeof(TestDataExtensionBase));
MetaType extType = interfaceType.AddSubType(200, myDataObjectExtA.GetType());
model.Add(typeof(TestDataExtensionBase), true);
model.Add(myDataObjectA.Ext.GetType(), true);
model.CompileInPlace();
model.Serialize(tmpMemoryStream, myDataObjectA);
byte[] tmpDat = tmpMemoryStream.ToArray();
Если я запускаю следующее, свойства базового класса не сериализуются, и мне нужно, чтобы они были сериализованы.
По моему мнению, я должен был добавить подтип для TestDataExtensionBase следующим образом:
MetaType extBaseType = interfaceType.AddSubType(100, typeof(TestDataExtensionBase));
MetaType extType = extBaseType.AddSubType(200, myDataObjectExtA.GetType());
Но это приводит к: Неожиданному подтипу: TestDataExtension. Кто-нибудь знает, что я делаю не так? Любая помощь будет оценена.