私は素晴らしい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();
、と私はそれらをシリアル化する必要があります。
私TypeModelは、このように構成されています。私の意見で
私はこのようなTestDataExtensionBaseのためのサブタイプを追加している必要があります。
MetaType extBaseType = interfaceType.AddSubType(100, typeof(TestDataExtensionBase));
MetaType extType = extBaseType.AddSubType(200, myDataObjectExtA.GetType());
しかし、これは、その結果:予期しないサブタイプ:TestDataExtension。 誰かが私が間違っていることを知っていますか?どんな助けもありがとう。
常にanwserは明らかにかなりシンプルですが、これは魅力的です。迅速な対応に感謝します。 – pabes