如何解决序列图时异常
| 我仍在使用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);
}
消息“可能已检测到递归...”,引发类型为“ 1”的异常。
有趣的是,如果删除Children
属性上的属性AsReference
,它不会!不幸的是,上面的几行只是为了说明问题而写的,对于我正在使用的实际结构,我需要此属性。
所以我的问题是……这是一个已知问题,是否计划有任何补丁程序将其很快解决?还是有人知道任何解决方法?
谢谢
解决方法
这只是一个错误(感谢您如此彻底地使用Beta!)-在动态/引用处理中,它是对对象进行双重计数(作为垫片包装的一部分,它欺骗来做魔术,并且一次针对对象)本身)。
为了提高效率,递归检测仅在超过特定深度时才完全发挥作用。您的代码超出了此深度,导致重复计数被视为递归。我已经在代码中解决了这个问题。上面的代码在本地传递,并将在下一滴中传递。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。