我已经和 JSON.net 合作了一段时间。我已经编写了自定义转换器和自定义合约解析器(通常来自 S.O. 和 Newtonsoft 网站上的修改示例),它们工作正常。
挑战在于,除了示例之外,我几乎没有看到关于何时应该使用一个或另一个(或两个)进行处理的解释。通过我自己的经验,我基本上已经确定合同解决器更简单,所以如果我能用它们做我需要的事情,我就会走这条路;否则,我使用自html" target="_blank">定义 JsonConverters。但是,我进一步知道两者有时一起使用,因此概念变得更加不透明。
问题:
好问题。我还没有看到一个明确的文档说什么时候你应该更愿意编写一个自定义的ContractResolver
或一个自定义的JsonConverter
来解决特定类型的问题。他们确实做不同的事情,但每个人可以解决什么样的问题之间存在一些重叠。在回答StackOverflow上的问题时,我已经写了相当多的,所以随着时间的推移,情况对我来说变得更加清晰。以下是我对它的看法。
协定解析器始终由 Json.Net 使用,并在广泛的级别上控制序列化/反序列化行为。如果设置中未提供自定义解析程序,则使用 DefaultContract 解析程序
。解析程序负责确定:
JObject
、普通旧对象等); [JsonProperty
]、[JsonIgnore]、[JsonConverter]
等
),以及 一般来说,如果要跨各种类自定义序列化或反序列化的某些方面,则可能需要使用 ContractResolver
来执行此操作。下面是您可以使用合同解析程序
自定义的一些内容示例:
与 ContractResolver
相比,JsonConverter
的重点更窄:它实际上旨在处理单个类型或相关类型的一小部分子集的序列化或反序列化。此外,它的工作级别低于解析器。当转换器负责某个类型时,它可以完全控制如何读取或写入该类型的 JSON:它直接使用 JsonReader 和 JsonWriter
类来完成它的工作。换句话说,它可以更改该类型的 JSON 形状。同时,转换器是与“大图”分离,并且无法访问上下文信息,例如正在(反)序列化的对象的父级或与之一起使用的属性属性。以下是您可以使用
JsonConverter
解决的一些问题示例:
ToString()
问题内容: 我正在与Json.Net解析数组。我正在尝试做的是将名称/值对从数组中拉出,并在解析JObject时将它们分配给特定的变量。 这是数组中的内容: 这是我在C#中获得的东西: 我是JSON和Json.Net的新手,因此它可能是其他人的基本解决方案。我基本上只需要在foreach循环中分配名称/值对,以便可以在前端输出数据。有人做过吗? 问题答案: 您可以这样获得数据值: 小提琴:http
问题内容: 我在C#中有一个类似以下的字符串。我需要遍历并创建HTML表输出。我尝试使用JSON.NET,但无法弄清楚如何检索键(名称,年龄和工作)。 表格格式为 任何帮助将不胜感激。 Dave提供的代码在这里是理想的解决方案..但是它适用于.NET 4.0 ..我已经将JSON.NET和以下代码用于.NET 3.5 使用Newtonsoft.Json.Linq; 问题答案: 您可以使用.NET
问题内容: 我有一个.NET项目。我正在使用JSON.NET库。我需要使用该库来解析一些JSON。我的JSON看起来像这样: 该对象实际上只是键/值对的列表。我试图弄清楚如何使用JSON.NET来1)解析此JSON和2)通过键/值对进行循环。有没有办法做到这一点?如果是这样,怎么办? 我唯一看到的是将反序列化为强类型的对象。 非常感谢! 问题答案: 您可以反序列化为 由于JObject实现,因此您
问题内容: 我有一个场景。 必需的输入和输出是JSON。 我需要一些转换代码或最好是xslt类型的语言才能将json从一种格式转换为另一种格式。该变压器也需要快速运行,因为转换将即时进行。 编辑 我没有收到INPUT对象的定义,它可能会在运行时更改。但是如果需要,我可以将类用于OUTPUT对象。我尝试以 json- > xml-> xslt-> xml-> json的方式进行此操作 ,但 此刻 每
我试图将JSON文件中的数据显示到Listview中,但是我得到了以下解析错误。 下面是我的JSON文件: 下面是我的代码:
我正在尝试将JSON文件从下面的命令转换为CSV格式: 我尝试了jq命令如下,但没有成功: 或 所需输出如下所示:
问题内容: 我正在使用JSON解析器提取值,并且正在使用以下jar json- path-2.1.0,当我调用在weblogic服务器上部署为webservice的用例时,出现以下错误:从json字符串中提取值,效果很好,但是用例的服务器版本引起了问题。我不确定耳朵中是否还有其他罐子会对这产生负面影响 问题答案: 偶然发现了同样的问题。 它不起作用的原因不是JDK8。之所以遇到此问题,是因为web
我使用JSON解析器来提取值,并使用以下jar json-path-2.1.0,当我在weblogic服务器上调用作为webservice部署的用例时,我得到了以下错误。我编写了一个小的主程序来从JSON字符串中提取值,它工作得很好,但是用例的服务器版本给出了问题。我不确定是否有任何其他罐子的一部分,我的耳朵可以负面影响这一点