Мне все еще нужно оценить воздействие (не то, что нужно сушить, пока моя голова ощущается как сыр), но есть .... проблема с объектом root на графике - значение: потому что я обычно обрабатываю отслеживание ссылок при обходе ассоциации , а в корневом объекте нет никакой связи.Я думаю, что я, вероятно, могу решить эту проблему с помощью некоторого атрибута уровня типа (например, всегда рассматривать как ссылку).
В любом случае, сейчас вы можете обойти это, добавив еще один уровеньк графику (искусственно добавляя ассоциацию), т.е.
static class Program
{
public static void Main()
{
Node node = new Node { Data = "parent" };
node.AddChild(new Node { Data = "child" });
using (MemoryStream memStream = new MemoryStream())
{
Serializer.Serialize(memStream, new NodeWrapper { Root = node });
memStream.Position = 0;
Node deserialized = Serializer.Deserialize<NodeWrapper>(memStream).Root;
Link childLink = deserialized.ChildLinks.Single();
Debug.Assert(ReferenceEquals(childLink, childLink.Child.ParentLinks.Single()));
}
}
}
[ProtoContract]
class NodeWrapper
{
[ProtoMember(1, AsReference = true, IsRequired = true)]
public Node Root {get;set;}
}