我有一个 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
属性进行硬编码,因为有时我需要填充该集合,例如当我返回地址列表并且我想要他们的商家时属性已填充。
- 为什么
.Ignore
不能像该主题的所有其他帖子一样工作 建议? - 如果我必须坚持使用
PreserveReferencesHandling.Objects
,iOS 应用程序如何才能使用这种 JSON 格式?
最佳答案
您的模型中是否存在多对多关系?
我发现(困难的方法)如果两个实体之间存在多对多关系并且两个实体都有 ICollection,
导航属性。RefenceLoopHandling.Ignore
仍然会进入无限循环
如何解决?我将 [JsonIgnore]
放在其中一个导航属性上。一个 hack,但有效。
关于c# - JsonFormatter.SerializerSettings ReferenceLoopHandling.Ignore 导致 EF 模型无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30238704/