在JSON.NET中设置ref为子值



我有一个与JSON.NET相关的问题。我有一个项目在我这边,项目本身已经从实体框架转换为JSON值(所有的选择和查询都写了)。

由于循环引用问题,我正在使用JSON.NET。但是,当我的代码被生成为JSON时,元素的第一个子元素首先获得$id值,父元素本身获得$ref值。

这对我来说是一个非常棘手的问题,我知道我可以自己编写匿名查询来避免这个问题。但是由于项目的规模,更改所有查询为时已晚,因为老程序员已经按原样编写了项目。

我想知道是否有一种方法可以在JSON.NET中设置这个选项。

让我这样解释我的问题:

假设我有一个来自JSON的JSON。净:

1-Question $id:1
  1-a- Response_Group $id:2
    **1-a-a-Response $id: 3**
**1-Response $ref:3**

如果我想改变这个行为,我想得到这个:

1-Question $id:1
  1-a- Response_Group $id:2
    **1-a-a-Response $ref:3**
**1-Response $id:3**

上分支支配下分支。

是否有办法在JSON上实现这一点。净吗?如果JSON中没有选项。. NET,我应该直接分叉JSON吗?. NET项目并开始以这种方式改变逻辑吗?

如果没有办法解决这个问题,那么我将开始编写匿名查询。

在Json.Net中没有选项可以改变它的工作方式。它这样工作的原因是因为Json。Net在反序列化JSON时使用仅向前读取器,因此特定的$id必须出现在任何相应的$ref值之前。否则无法解析引用。

要使其按照您建议的方式工作,您要么需要对JSON进行两次传递(这可能并不总是可能的,例如网络流),要么生成代理对象来代替未解析的引用(这比听起来更难)。

如果你想解决这个问题,没有人会阻止你分叉项目,但我认为你最好的选择是尝试使用Json的功能。如果可能的话,Net已经提供了。

最新更新