当前位置: 首页 > 面试题库 >

在Newtonsoft.Json中添加多个合同解析器

勾海超
2023-03-14
问题内容

数据结构蓝图:

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都添加到合同解析器中。

问题答案:

Json.Net一次不允许一个以上的合同解析器,因此您将需要一种组合其行为的方法。我假设这NullToEmptyStringResolver是一个自定义解析器,它继承自Json.Net的DefaultContractResolver类。如果是这样,一种实现所需结果的简单方法是改为NullToEmptyStringResolver继承CamelCasePropertyNamesContractResolver

public class NullToEmptyStringResolver : CamelCasePropertyNamesContractResolver
{
    ...
}

如果您不喜欢这种方法,则另一个想法是将骆驼肠衣的行为添加到NullToEmptyStringResolver。如果您看一下如何CamelCasePropertyNamesContractResolver在源代码中实现,您会发现这就像NamingStrategy在构造函数中设置一样简单(假设您使用的是Json.Net
9.0.1或更高版本)。您可以将相同的代码添加到的构造函数中NullToEmptyStringResolver

public class NullToEmptyStringResolver : DefaultContractResolver
{
    public NullToEmptyStringResolver() : base()
    {
        NamingStrategy = new CamelCaseNamingStrategy
        {
            ProcessDictionaryKeys = true,
            OverrideSpecifiedNames = true
        };
    }

    ...
}


 类似资料:
  • 问题内容: 我的脚本定义了一个主解析器和多个子解析器。我想将论点应用于一些子解析器。到目前为止,代码如下所示: 如您所见,重复了两次。实际上,我还有更多的次级解析器。有没有一种方法可以遍历现有的子解析器以避免重复? 作为记录,我正在使用Python 2.7 问题答案: 这可以通过定义一个包含公共选项的父解析器来实现: 这将生成以下格式的帮助消息: 输出: 输出: 但是,如果您运行程序,则如果未指定

  • 问题内容: 我必须按照下面显示的方式创建一个表。我们可以这样创建吗?(如是) 表名称:样本 其中包含多个值的类别归档。 以及我们如何搜索类别4出现在表格的哪一行。 问题答案: 您无法创建嵌套表。而且您想到的并不是设计这样的桌子的好主意。您应该有两个表(如果是category,则恰好三个 表 包含描述)。一个用于,第二个表保存 每个产品 的 类别 。示例设计如下所示, 和填充样本记录 SQLFidd

  • 在所有的例子代码中,我们在引导过程中通过 handler() 或childHandler() 都只添加了一个 ChannelHandler 实例,对于简单的程序可能足够,但是对于复杂的程序则无法满足需求。例如,某个程序必须支持多个协议,如 HTTP、WebSocket。若在一个 ChannelHandle r中处理这些协议将导致一个庞大而复杂的 ChannelHandler。Netty 通过添加多

  • 我是java新手,正在努力克服它。我有类似(< code>String URL,int Score)的数据,我想在数组列表中实现它。我研究了如何在< code>ArrayList或< code>LinkedList中实现多种类型的变量,发现解决方案是从超类创建子类,我创建了这个子类: 我的超级班是: 当我尝试使用添加对象时,我遇到了错误?该错误说: 类型ArrayList中的add(int,MyS

  • 因此,我在脚本文件夹中有两个独立的GeoJSON文件,一个用于绘制边界线,另一个用于放置标记。每个GeoJSON文件都有不同的内容,例如: 还有一个: 将一个GeoJSON放在这种格式中工作, 但是如何添加另一个geoJSON呢?

  • 我有一个与docusign的开发人员帐户,能够上传一个单一的PDF文件,并签署这样。但根据我的要求,我需要在docusign内一次上传多个PDF文件,并相应地签名。我们目前使用的是docusign SOAP API,下面是示例访问URL:http://etplprojects.net/docusign_API/SOAP/这可能吗?请建议。