我的项目中有一个带有循环引用的对象。我把[JsonIgnore]放在字段上面就像这样:
[JsonIgnore]
public virtual Foobar ChildObject { get; set; }
序列化对象时,我仍然遇到循环引用错误。唯一没有JsonIgnore的字段是字符串字段,不应该导致这种情况。还有什么我需要做的才能让JsonIgnore工作吗?
谢谢!
答案 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 引用。
请注意,此属性存在于多个命名空间中:
我已在 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