Я все еще играю с недавно выпущенной версией 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
в свойстве Children
, это не так! К сожалению, приведенные выше строки просто написаны для иллюстрации проблемы, и мне нужен этот атрибут для реальной структуры, которую я использую.
Так что мой вопрос ... это известная проблема, и планируется ли какой-либо патч исправить это очень скоро? Или кто-нибудь знает обходной путь?
Спасибо