JsonIgnore属性在ASP.NET中不起作用?

时间:2010-06-01 23:26:47

标签: c# asp.net asp.net-mvc json json.net

我的项目中有一个带有循环引用的对象。我把[JsonIgnore]放在字段上面就像这样:

    [JsonIgnore]
    public virtual Foobar ChildObject { get; set; }

序列化对象时,我仍然遇到循环引用错误。唯一没有JsonIgnore的字段是字符串字段,不应该导致这种情况。还有什么我需要做的才能让JsonIgnore工作吗?

谢谢!

3 个答案:

答案 0 :(得分:23)

您可能还有一些其他属性链接回其父级。使用ReferenceLoopHandling.Ignore设置可防止自我引用循环。

using Newtonsoft.Json;

JsonSerializerSettings jsSettings = new JsonSerializerSettings();
jsSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;

string json = JsonConvert.SerializeObject(foobars, Formatting.None, jsSettings);

答案 1 :(得分:16)

我错误地解析了 JsonIgnore 引用。

请注意,此属性存在于多个命名空间中:

  • System.Text.Json.Serialization
  • Newtonsoft.Json

我已在 VS 中将其解决为 System.Text.Json.Serialization.JsonIgnore - 但是我将 Newtonsoft 库用于我的实际序列化/反序列化 - 因此该属性被忽略。 更改对 Newtonsoft.Json.JsonIgnore 的引用已解决。

答案 2 :(得分:0)

如果有人需要忽略子引用的ASP.Net Core实现,就在这里。

public void ConfigureServices(IServiceCollection services)
{
...

    services.AddMvc()


         .AddJsonOptions(
            options => options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
        );

    ...
}

src:https://docs.microsoft.com/en-us/ef/core/querying/related-data