我正在尝试使用 protobuf-net 库序列化对象集合。我遇到了一个问题,即集合中的顶级对象没有被设置为图表中的引用,因此当它们在序列化子项中被进一步引用时,它们会被重新序列化并在该点创建为引用. 有没有办法让顶级对象序列化为引用?我已经阅读了几篇相互冲突的帖子,这些帖子似乎表明 protobuf-net 现在支持这一点,而其他帖子似乎建议在顶级对象周围创建一个包装器以启用此行为。谢谢...
这是显示我的问题的示例程序。如您所见,引用不相等。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ProtoBuf;
namespace ProtoBufTest
{
[ProtoContract(AsReferenceDefault=true)]
public class Foo
{
[ProtoMember(1, AsReference=true)]
public FooChild Child;
[ProtoMember(2)]
public Guid Id;
}
[ProtoContract]
public class FooChild
{
[ProtoMember(1, AsReference=true)]
public Foo Parent;
}
class Program
{
static void Main(string[] args)
{
List<Foo> foos = new List<Foo>()
{
new Foo() { Child = new FooChild(), Id = Guid.NewGuid() }
};
foos[0].Child.Parent = foos[0];
var clone = Serializer.DeepClone(foos);
Console.WriteLine(ReferenceEquals(clone[0], clone[0].Child.Parent));
Console.WriteLine(clone[0].Id == clone[0].Child.Parent.Id);
}
}
}