我仍在使用新发布的 protobuf-net 版本,但遇到了一个我不明白的问题。
让我们考虑下面的代码:
[ProtoContract]
class Node
{
public Node()
{
Children = new List<Node>();
}
[ProtoMember(1, IsRequired = true)]
public int Data { get; set; }
[ProtoMember(2, IsRequired = true, AsReference = true)]
public List<Node> Children { get; set; }
public void AddChild(Node child)
{
Children.Add(child);
}
}
static void Main()
{
Node n = new Node {Data = 0}, root = n;
for (int i=1; i<15; i++)
{
Node child = new Node {Data = i};
n.AddChild(child);
n = child;
}
Node clone = Serializer.DeepClone(root);
}
它抛出类型异常ProtoException
带有消息“检测到可能的递归...”
有趣的是,如果我删除该属性AsReference
on the Children
财产它没有!不幸的是,上面的行只是为了说明问题而编写的,我需要这个属性来实现我正在使用的实际结构。
所以我的问题是...这是一个已知问题吗?是否有任何补丁计划很快修复它?或者有人知道任何解决方法吗?
Thanks
这只是一个错误(感谢您如此彻底地练习测试版!) - 在动态/引用处理中,它对对象进行了双重计数(一旦作为填充包装器的一部分,它就会欺骗以实现魔法,一次对于对象本身)。
为了提高效率,递归检测仅在超过特定深度时才全面启动。您的代码超出了这个深度,导致重复计数被视为递归。我已经在代码中修复了这个问题。上面的代码在本地传递,并将在下一滴中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)