Inheritance Protobuf继承层次结构
我有一个基类定义为:Inheritance Protobuf继承层次结构,inheritance,protocol-buffers,Inheritance,Protocol Buffers,我有一个基类定义为: [ProtoInclude(100, "Module.v1.DataObject.B, Module.v1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null")] [ProtoInclude(101, "Module.v2.DataObject.B, Module.v2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null")] public clas
[ProtoInclude(100, "Module.v1.DataObject.B, Module.v1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null")]
[ProtoInclude(101, "Module.v2.DataObject.B, Module.v2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null")]
public class A
{
[ProtoMember(1)]
public string Name;
}
派生类在两个不同的程序集中定义:
Module.v1具有
[Serializable]
[ProtoContract]
public class B: A
{
[ProtoMember(2)]
public int Key;
}
模块2.v2已完成
[Serializable]
[ProtoContract]
public class B: A
{
[ProtoMember(2)]
public int Key;
}
当我尝试序列化/反序列化其中一个时,例如Module.v2.DataObject.B,protobuf抛出异常-
“类型只能参与一个继承层次结构模块。v2.DataObject.B”
你能帮我纠正一下我在这里可能犯的错误吗?我无法纠正;我有3个项目:
- 试验台
- 第一模块
- 第二模块
A
。然后,这两个模块的输出作为文件在试验台的位置提供,以供加载
我的试验台可以:
static void Main()
{
var type = Type.GetType("Module.v1.DataObject.B, Module.v1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null");
A a = (A)Activator.CreateInstance(type);
var clone = Serializer.DeepClone(a);
Console.WriteLine(clone.GetType().FullName);
type = Type.GetType("Module.v2.DataObject.B, Module.v2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null");
a = (A)Activator.CreateInstance(type);
clone = Serializer.DeepClone(a);
Console.WriteLine(clone.GetType().FullName);
}
工作正常,输出:
Module.v1.DataObject.B
Module.v2.DataObject.B
有趣;我将不得不看“无法重新编程”(完整设置见答案)谢谢马克!我错过了早些时候的回复-所以问题是项目有一些构建配置不匹配的解决方法,这解决了问题。