Я пытаюсь сериализовать модель, используя отличный Protobuf-NET. Я не могу использовать атрибуты (объекты неизвестны во время компиляции), поэтому я построил TypeModel. Моя объектная модель состоит из класса TestDataObject, этот класс обладает свойством ITestDataExtension. Абстрактный базовый класс TestDataExtensionBase реализует этот интерфейс и класс TestDataExtension (myDataObjectExtA в коде) наследует этот базовый класс.Protobuf-net создание типовой модели с интерфейсом и абстрактным базовым классом
Мой 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. Кто-нибудь знает, что я делаю неправильно? Любая помощь будет оценена по достоинству.
Как всегда, anwser, по-видимому, довольно прост, это работает как шарм. Большое спасибо за быстрый ответ. – pabes