【问题标题】:json.net doesn't ignore circular references when set to ReferenceLoopHandling.Ignorejson.net 设置为 ReferenceLoopHandling.Ignore 时不会忽略循环引用
【发布时间】:2016-08-20 01:57:57
【问题描述】:

我正在使用的这个项目曾经在每个 Web 请求上为每个存储库方法创建一个新的 DbContext(这意味着每个请求都创建了任意数量的 dbcontexts)。

我已经解决了这个问题,每个请求只有一个上下文,但是一些序列化出现问题并出现内存不足异常。查看序列化数据,Json.Net 完全忽略了循环引用处理的ReferenceLoopHandling.Ignore 枚举值。请注意,当我将其设置为ReferenceLoopHandling.Error 时,我会立即在自引用对象上得到一个异常。

启用和禁用代理和延迟加载都会发生这种情况。

用于 JsonSerializer 的设置的完整列表:

DateFormatHandling = DateFormatHandling.IsoDateFormat, DateTimeZoneHandling = DateTimeZoneHandling.Local, Formatting = Formatting.None, ReferenceLoopHandling = ReferenceLoopHandling.Ignore, NullValueHandling = NullValueHandling.Include

【问题讨论】:

标签: c# json entity-framework serialization json.net


【解决方案1】:

尝试将SerializerSettings.PreserveReferencesHandling 设置为PreserveReferencesHandling.Objects,以便使用引用而不是重新序列化对象来执行对现有对象的引用。

【讨论】:

  • 我知道这很旧,但现在这也影响了我。此建议将阻止错误发生,但随后将导致您必须以完全不同的方式读取 JSON。为什么对象不按它说的去做?
猜你喜欢
  • 2018-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-01
  • 2017-09-30
  • 2012-11-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多