数据结构蓝图:
public class Movie
{
public string Name { get; set; }
}
使用 Newtonsoft.Json,我有以下 Json 序列化配置。
var settings = new JsonSerializerSettings() {
ContractResolver = new CamelCasePropertyNamesContractResolver(),
};
显然,这将打印出:
{
name: null
}
现在,我需要在 JsonSerializerSettings 中的 ContractResolver 中添加另一个 NullToEmptyStringResolver,如何实现如下输出:
{
name: ""
}
- 请注意我的 NullToEmptyStringResolver 已经写好了。但我需要将 NullToEmptyStringResolver 和 CamelCasePropertyNamesContractResolver 添加到 Contract Resolver。
最佳答案
Json.Net 一次不允许多个契约解析器,因此您需要一种方法来组合它们的行为。我假设 NullToEmptyStringResolver
是一个自定义解析器,它继承自 Json.Net 的 DefaultContractResolver
类。如果是这样,实现所需结果的一种简单方法是使 NullToEmptyStringResolver
继承自 CamelCasePropertyNamesContractResolver
。
public class NullToEmptyStringResolver : CamelCasePropertyNamesContractResolver
{
...
}
如果您不喜欢这种方法,另一个想法是将驼峰式大小写行为添加到您的NullToEmptyStringResolver
。如果您看一下 CamelCasePropertyNamesContractResolver
在 source code 中是如何实现的,您会发现这就像在构造函数中设置 NamingStrategy
一样简单(假设您使用的是 Json.Net 9.0.1 或更高版本)。您可以将相同的代码添加到 NullToEmptyStringResolver
的构造函数中。
public class NullToEmptyStringResolver : DefaultContractResolver
{
public NullToEmptyStringResolver() : base()
{
NamingStrategy = new CamelCaseNamingStrategy
{
ProcessDictionaryKeys = true,
OverrideSpecifiedNames = true
};
}
...
}
关于c# - 在 Newtonsoft.Json 中添加多个合约解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39612636/