Я пытаюсь сериализовать модель, используя отличный 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.Кто-нибудь знает, что я делаю не так?Любая помощь будет оценена.