28

我的项目中有一个带有循环引用的对象。我已将 [JsonIgnore] 放在字段上方,如下所示:

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

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

谢谢!

4

3 回答 3

37

我错误地解决了 JsonIgnore 参考。

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

  • System.Text.Json.序列化
  • 牛顿软件.Json

我已经在 VS 中解决了这个问题到System.Text.Json.Serialization.JsonIgnore - 但是我使用 Newtonsoft 库进行实际的序列化/反序列化 - 因此该属性被忽略了。更改对Newtonsoft.Json.JsonIgnore的引用已解决。

于 2021-01-06T17:54:59.843 回答
31

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

using Newtonsoft.Json;

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

string json = JsonConvert.SerializeObject(foobars, Formatting.None, jsSettings);
于 2010-06-04T06:24:30.023 回答
3

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

public void ConfigureServices(IServiceCollection services)
{
...

    services.AddMvc()


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

    ...
}

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

于 2019-09-21T18:29:26.740 回答