JSON自我引用循环

时间:2018-02-16 14:57:49

标签: c# asp.net json

我正在构建一些小型预订应用程序,我一直都会收到此错误。

我解决了它:            config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;

但现在我得到这样的答案:

{
    "ApartmentId": 1,
    "Building": {
        "BuildingId": 1,
        "Apartments": [
            {
                "ApartmentId": 2,
            }
        ]
    },
}

对于班级建设,一切正常。这只是公寓的“走远”。我尝试了这个主题的解决方案,但它不起作用:https://stackoverflow.com/questions/7397207/json-net-error-self-referencing-loop-detected-for-type#=

以下是我的课程:

public class Apartment
{
    public int ApartmentId { get; set; }
    public Building Building { get; set; }
}

public class Building
{
    public int BuildingId { get; set; }
    public List<Apartment> Apartments { get; set; }
}

问题是,我错过了什么?如何第二次摆脱公寓上市?

1 个答案:

答案 0 :(得分:0)

由于您使用的是Newtosoft的Json库,因此您可以使用属性[JsonIgnore]。具有此属性的属性不会显示在您的json中。

您可以将它放在您的建筑类中的公寓物业:

public class Building
{
    //All other properties ...

    [JsonIgnore]
    public List<Apartment> Apartments { get; set; }
}

如果您希望为同一个班级提供不同的序列化行为,我建议为每个数据传输方案实施每个类DTO classes approach,并根据需要添加属性。

还有来自Microsoft的关于DTO模式的this document