在JSON.NET中将ref设置为children值

时间:2014-06-23 16:57:48

标签: c# json.net

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

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

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

我想知道是否有办法在JSON.NET中设置此选项。

让我用这种方式解释我的问题:

我们说我有一个来自JSON.NET的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.NET端实现这一点?如果JSON.NET中没有选项,我应该只是分叉JSON.NET项目并开始以这种方式更改逻辑吗?

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

1 个答案:

答案 0 :(得分:1)

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

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

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