위대한 Protobuf-NET을 사용하여 모델을 직렬화하려고합니다. 나는 속성을 사용할 수 없다. (객체는 컴파일 타임에 알려지지 않았다.) 그래서 TypeModel을 생성했다. 내 개체 모델은 TestDataObject 클래스로 구성되며이 클래스의 속성은 ITestDataExtension입니다. 추상 baseclass TestDataExtensionBase이 인터페이스 을 구현하고 TestDataExtension (코드의 myDataObjectExtA) 클래스는이 baseclass를 상속합니다. 내가 직렬화하지 않는 기본 클래스의 속성 다음 실행하면Protobuf-net 인터페이스와 추상 baseclass를 가진 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는 다음과 같이 구성되어있다.
MetaType extBaseType = interfaceType.AddSubType(100, typeof(TestDataExtensionBase));
MetaType extType = extBaseType.AddSubType(200, myDataObjectExtA.GetType());
그러나 이것은 결과 : 제 생각에는
나는이 같은 TestDataExtensionBase에 대한 하위 유형을 추가해야 예기치 않은 하위 유형을 : TestDataExtension합니다. 내가 뭘 잘못하고 있는지 아는 사람이 있습니까? 어떤 도움을 주시면 감사하겠습니다.
언제나처럼 anwser는 분명히 매우 단순합니다. 이것은 매력처럼 작동합니다. 빠른 응답을 보내 주셔서 감사합니다. – pabes