【发布时间】:2015-06-28 20:17:35
【问题描述】:
我有以下类结构:
[JsonObject]
public class Polygon : IEnumerable<Point>
{
public List<Point> Vertices { get; set; }
public AxisAlignedRectangle Envelope { get; set; }
}
public class AxisAlignedRectangle : Polygon {
public double Left { get; set; }
...
}
我正在序列化 Polygon 类,但是当我这样做时,我得到一个带有消息的 JsonSerializationException
检测到类型为“MyNamespace.AxisAlignedRectangle”的属性“Envelope”的自引用循环。
如果我将[JsonObject(IsReference = true)] (as described here) 添加到 AxisAlignedRectangle,代码运行良好,但我在 AxisAlignedRectangle 的每个实例中获得了一个自动分配的 $id 字段,并在该实例被重新引用时获得了一个 $ref 字段.例如,当我序列化一个多边形时,我得到:
{
Vertices: [ ... ],
Envelope: {
$id: '1',
Left: -5,
...
Vertices: [ ... ],
Envelope: {
$ref: '1'
}
}
}
我希望在序列化 AxisAlignedRectangle 时完全删除 Polygon 属性。我尝试将 DataContractAttribute 添加到 AxisAlignedRectangle 类(以及适当的 DataMemberAttribute 属性),但 Polygon 的所有属性仍在序列化中。这是出乎意料的,因为Json.NET documentation 中有一个示例似乎表明这种方法应该有效。
当被序列化的类型是 AxisAlignedRectangle 时,有没有人知道从生成的 Json.NET 序列化中显式删除(最重要的是)Envelope 属性的方法?谢谢。
【问题讨论】:
标签: c# json serialization json.net