我有一个基类定义为:
[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;
}
派生类在2个不同的程序集中定义:
Module.v1有
[Serializable]
[ProtoContract]
public class B: A
{
[ProtoMember(2)]
public int Key;
}
Module.v2有
[Serializable]
[ProtoContract]
public class B: A
{
[ProtoMember(2)]
public int Key;
}
当我尝试序列化/反序列化其中一个时,例如。 Module.v2.DataObject.B,protobuf抛出异常 - “一个类型只能参与一个继承层次结构Module.v2.DataObject.B”
你能帮忙解决我在这里可能做错的事吗?
答案 0 :(得分:0)
我不能责备;我有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