序列化图形时出现exception

我还在玩新发布的protobuf-net版本,我正面临一个我不明白的问题。

让我们考虑以下代码:

[ProtoContract] class Node { public Node() { Children = new List(); } [ProtoMember(1, IsRequired = true)] public int Data { get; set; } [ProtoMember(2, IsRequired = true, AsReference = true)] public List 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类型的exception,并显示消息“检测到可能的递归…”

有趣的是,如果我删除子属性上的属性AsReference它不会! 不幸的是,上面的行只是为了说明问题而写的,我需要这个属性用于我正在使用的真实结构。

所以我的问题是……它是一个已知的问题,是否有任何补丁计划很快修复它? 或者有人知道任何解决方法吗?

谢谢

这只是一个错误(感谢你如此彻底地运用测试版!) – 在动态/引用处理中,它是对对象进行双重计算(一次作为shim包装器的一部分,它欺骗了魔法,一次用于对象本身)。

为了提高效率,递归检测仅在特定深度之外进入全齿轮。 你的代码绊倒了这个深度,导致重复计算被视为递归。 我已在代码中修复此问题。 上面的代码在本地传递,并将在下一个下降。