我已经和JSON.net合作了一段时间.我已经编写了自定义转换器和自定义合同解析器(通常来自修改SO和Newtonsoft网站上的示例),它们工作正常.
除了例子之外,我面临的挑战是,我什么时候应该使用其中一个(或两个)进行处理.根据我自己的经验,我基本上已经确定合同解决方案更简单了,所以如果我可以用他们做我需要的东西,我会这样做; 否则,我使用自定义JsonConverters.但是,我进一步知道两者有时一起使用,因此概念变得更加不透明.
问题:
Bri*_*ers 156
好问题.我还没有看到一份明确的文档,说明何时应该编写自定义ContractResolver或自定义JsonConverter来解决特定类型的问题.他们真的做了不同的事情,但每种问题可以解决哪些问题之间存在一些重叠.在回答有关StackOverflow的问题时,我已经写了相当多的数字,所以随着时间的推移,我的情况变得更加清晰了.以下是我的看法.
Json.Net 始终使用合同解析程序,并在广泛的层面上管理序列化/反序列化行为.如果设置中未提供自定义解析程序,则DefaultContractResolver使用该解析程序.解析器负责确定:
JObject,普通旧对象等);[JsonProperty],[JsonIgnore],[JsonConverter]等),和一般来说,如果要在各种类中自定义序列化或反序列化的某些方面,则可能需要使用a ContractResolver来执行此操作.以下是您可以使用以下内容自定义的一些示例ContractResolver:
与a相反,a ContractResolver的焦点JsonConverter更窄:它实际上是为单个类型或相关类型的一小部分处理序列化或反序列化.此外,它的工作水平低于解析器的水平.当转换器负责某个类型时,它可以完全控制如何为该类型读取或写入JSON:它直接使用JsonReader和JsonWriter类来完成它的工作.换句话说,它可以更改该类型的JSON 的形状.同时,转换器与"大图"分离,并且无法访问上下文信息,例如被(de)序列化的对象的父级或与其一起使用的属性属性.以下是您可以使用以下方法解决的一些问题示例JsonConverter:
| 归档时间: |
|
| 查看次数: |
12777 次 |
| 最近记录: |