C# 用ProtoBuf-Net反序列化嵌套动态类型的问题
我正在尝试使用ProtoBuf Net r668反序列化一个封装在几个DynamicType=true层中的对象 使用旧版本的ProtoBuf Net(v1),它将毫无问题地进行反序列化。然而,在最新版本中,它在以下方面失败 ProtoBuf.ProtoException:内部错误;出现密钥不匹配C# 用ProtoBuf-Net反序列化嵌套动态类型的问题,c#,protobuf-net,C#,Protobuf Net,我正在尝试使用ProtoBuf Net r668反序列化一个封装在几个DynamicType=true层中的对象 使用旧版本的ProtoBuf Net(v1),它将毫无问题地进行反序列化。然而,在最新版本中,它在以下方面失败 ProtoBuf.ProtoException:内部错误;出现密钥不匹配 [协议] 私人甲级 { [原型成员(1,DynamicType=true)] 公共对象主体{get;set;} } [原始合同] 私人乙级 { [原型成员(1,DynamicType=true)] 公
[协议]
私人甲级
{
[原型成员(1,DynamicType=true)]
公共对象主体{get;set;}
}
[原始合同]
私人乙级
{
[原型成员(1,DynamicType=true)]
公共对象主体{get;set;}
}
[原始合同]
私人C类
{
[原成员(1)]
公共字符串名称{get;set;}
}
[测试]
public void Try_序列化_嵌套_动态类型()
{
var obj=newa(){Body=newb(){Body=newc(){Name=“Brian”}};
var serializer=newprotobufserializer();
var results=serializer.Serialize(obj);
var g=序列化程序。反序列化(结果);
}
你刚刚解决了我的问题!我原以为“AsReference”开关就是问题所在(并且已经在调试protobuf网络源代码)。但不是-这是动态图像类型@MarcGravel-我也有同样的问题。这件事有没有可能解决,或者很快就会解决?管理复杂/动态合同的其他建议?这种情况仍然存在,我们如何“扭转”这个问题?与João一样,我也提到了这个问题,尽管最近发布了大量新版本,但似乎没有得到解决。我想我会给Github添加一个问题,看看这是否会引起注意?
[ProtoContract]
private class A
{
[ProtoMember(1, DynamicType = true)]
public object Body { get; set; }
}
[ProtoContract]
private class B
{
[ProtoMember(1, DynamicType = true)]
public object Body { get; set; }
}
[ProtoContract]
private class C
{
[ProtoMember(1)]
public string Name { get; set; }
}
[Test]
public void Try_Serialize_Nested_DynamicTypes()
{
var obj = new A() {Body = new B() {Body = new C() {Name = "Brian"}}};
var serializer = new ProtoBufSerializer();
var results = serializer.Serialize(obj);
var g = serializer.Deserialize<A>(results);
}