在Newtonsoft.Json中添加多个合同解析器 [英] Add Multiple Contract Resolver in Newtonsoft.Json

查看:144
本文介绍了在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类.如果是这样,一种实现所需结果的简单方法是使NullToEmptyStringResolverCamelCasePropertyNamesContractResolver继承.

    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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆