在Newtonsoft.Json中添加多个合同解析器 [英] Add Multiple Contract Resolver in Newtonsoft.Json
问题描述
数据结构蓝图:
public class Movie
{
public string Name { get; set; }
}
使用Newtonsoft.Json,我具有以下用于Json序列化的配置.
Using Newtonsoft.Json, I have the following configuration for Json serialization.
var settings = new JsonSerializerSettings() {
ContractResolver = new CamelCasePropertyNamesContractResolver(),
};
很明显,这将打印出来:
Clearly that, this will print out:
{
name: null
}
现在,我需要在JsonSerializerSettings中的ContractResolver中添加另一个NullToEmptyStringResolver,如何实现如下输出:
Now, I need to add another NullToEmptyStringResolver to the ContractResolver in JsonSerializerSettings, how can I achieve that which output as below:
{
name: ""
}
- 请注意,我的NullToEmptyStringResolver已被写入.但是我需要将NullToEmptyStringResolver和CamelCasePropertyNamesContractResolver都添加到合同解析器中.
推荐答案
Json.Net一次不允许多个合同解析器,因此您将需要一种组合其行为的方法.我假设NullToEmptyStringResolver
是一个自定义解析器,它继承自Json.Net的DefaultContractResolver
类.如果是这样,一种实现所需结果的简单方法是使NullToEmptyStringResolver
从CamelCasePropertyNamesContractResolver
继承.
Json.Net does not allow more than one contract resolver at a time, so you will need a way to combine their behaviors. I'm assuming that NullToEmptyStringResolver
is a custom resolver which inherits from Json.Net's DefaultContractResolver
class. If so, one simple way to achieve your desired result is to make the NullToEmptyStringResolver
inherit from CamelCasePropertyNamesContractResolver
instead.
public class NullToEmptyStringResolver : CamelCasePropertyNamesContractResolver
{
...
}
如果您不喜欢这种方法,另一个想法是将骆驼套行为添加到您的NullToEmptyStringResolver
中.如果您查看CamelCasePropertyNamesContractResolver ="noreferrer">源代码,您将看到它就像在构造函数中设置NamingStrategy
一样简单(假设您使用的是Json.Net 9.0.1或更高版本).您可以将相同的代码添加到NullToEmptyStringResolver
的构造函数中.
If you don't like that approach, another idea is to add the camel casing behavior to yourNullToEmptyStringResolver
. If you take a look at how CamelCasePropertyNamesContractResolver
is implemented in the source code, you'll see this is as simple as setting the NamingStrategy
in the constructor (assuming you are using Json.Net 9.0.1 or later). You can add this same code to the constructor of yourNullToEmptyStringResolver
.
public class NullToEmptyStringResolver : DefaultContractResolver
{
public NullToEmptyStringResolver() : base()
{
NamingStrategy = new CamelCaseNamingStrategy
{
ProcessDictionaryKeys = true,
OverrideSpecifiedNames = true
};
}
...
}
这篇关于在Newtonsoft.Json中添加多个合同解析器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!