序列化图形时出现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包装器的一部分,它欺骗了魔法,一次用于对象本身)。
为了提高效率,递归检测仅在特定深度之外进入全齿轮。 你的代码绊倒了这个深度,导致重复计算被视为递归。 我已在代码中修复此问题。 上面的代码在本地传递,并将在下一个下降。
上述就是C#学习教程:序列化图形时出现exception分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/942256.html