c# - JsonFormatter.SerializerSettings ReferenceLoopHandling.Ignore 导致 EF 模型无限循环

标签 c# ios json entity-framework

我有一个 EF,数据库优先,一组模型,它们之间的关系由数据库的外键决定。当我尝试从 Web API 返回该对象图时,我遇到了问题。我已经阅读了该网站上的无数帖子,试图解决我最初的问题

Self referencing loop detected for property 'Merchant' with type 'MP.Models.Merchant'. Path 'tickets[0].customer.Merchant.Addresses[0]'.

我知道每个 Address 对象都有一个指向 Merchant 并导致循环的 Merchant 属性。

我读过 RefenceLoopHandling.Ignore 应该只是忽略引用,在初始引用之后,而不是序列化它们并且所有应该工作,但是当我这样做时会发生什么是我得到一个无限循环和我的工作进程增长到我的物理内存的大小,我必须杀死它。

使用 PreserveReferencesHandling = PreserveReferencesHandling.Objects 而不是 .Ignore 确实可以返回所有对象及其引用,但我有一个我认为不会的 iOS 应用程序能够转换该 JSON,因为我读到您需要使用 json.net 进行反序列化才能正常工作。

我不想对属性集合的任何 jsonIgnore 属性进行硬编码,因为有时我需要填充该集合,例如当我返回地址列表并且我想要他们的商家时属性已填充。

  1. 为什么 .Ignore 不能像该主题的所有其他帖子一样工作 建议?
  2. 如果我必须坚持使用 PreserveReferencesHandling.Objects,iOS 应用程序如何才能使用这种 JSON 格式?

最佳答案

您的模型中是否存在多对多关系?

我发现(困难的方法)如果两个实体之间存在多对多关系并且两个实体都有 ICollection,RefenceLoopHandling.Ignore 仍然会进入无限循环 导航属性。

如何解决?我将 [JsonIgnore] 放在其中一个导航属性上。一个 hack,但有效。

关于c# - JsonFormatter.SerializerSettings ReferenceLoopHandling.Ignore 导致 EF 模型无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30238704/

相关文章:

c# - 删除破折号但不删除连字符

C# 自动属性来包装私有(private)字段?

javascript - 验证 JSON 时出现问题

ios - 从一个 ViewController 到另一个 ViewController 保存和删除 NSUserDefaults - Swift 2

ios - 使导航堆栈中只有一个导航栏透明 iOS Swift

javascript - 使用 JS 编辑 JSON 数据结构

PHP MySQL 和 json_encode 在值周围没有引号?

c# - 哪种访问共享点的方法更好?

c# - 如何执行作为资源嵌入的可执行文件

ios - 从两个不同的数组中选择随机图像