protobuf-net v2 With Circular References

时间:2015-10-09 22:28:46

标签: c# protobuf-net

据我所知,从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版本,以防与特定版本相关。

0 个答案:

没有答案