据我所知,从v2开始的protobuf-net支持引用。
我目前正在尝试在数据结构中使用它,其中循环引用可能如下所示:
[ProtoContract]
internal class WaypointDatabase
{
[ProtoMember(1)]
public List<Waypoint> Waypoints { get; set; }
}
[ProtoContract(AsReferenceDefault = true)]
internal class Waypoint
{
[ProtoMember(1)]
public string Ident { get; set; }
[ProtoMember(2)]
public List<Route> Routes { get; set; }
}
[ProtoContract]
internal class Route
{
[ProtoMember(1)]
public Waypoint PreviousWaypoint { get; set; }
[ProtoMember(2)]
public Waypoint NextWaypoint { get; set; }
}
因此,使用protobuf-net序列化的主要对象是WaypointDatabase
的实例。此对象包含Waypoints
,其Routes
列表再次指向Waypoints
。
我想使用这种数据结构的原因是路线中没有包含/引用的路标。因此,我需要这个航点数据库来跟踪所有航点,无论它们是否在现有航线内。
当我现在尝试使用protobuf-net序列化WaypointDatabase
的实例时,我得到一个StackOverflowException并且我不明白为什么,因为我将Waypoint
类标记为AsReferenceDefault
我认为这样可以确保protobuf-net只存储引用(如果再次使用它)(这种方式不应该无休止地遵循循环引用)。
我做错了什么?
提前感谢您提供的任何提示
安德烈亚斯
P上。 S。:我正在使用protobuf-net的2.0.0.668版本,以防与特定版本相关。