如何让 Newtonsoft 将 bool 序列化为 false,而不是 False 或“false”[关闭]

2024-01-07

如果我序列化一个 bool 值,我会得到这样的结果:

myboolValue: False

我意识到这是由于微软的ToString()布尔值的实现。

是否有我可以在 Newtonsoft 中更改的设置以输出 false,例如:

myboolValue: false

我可以切换到字符串conditional ? "true" : "false",但这会在 JSON 中添加引号,例如:

myboolValue: "false"

自定义序列化程序可以删除引号吗?


Newtonsoft.Json 开箱即用地将 bool 序列化为 true/false:

using System;
using Newtonsoft.Json;

public class Test
{
    public bool f1;
    public bool f2;

    public Test()
    {
        f1 = false;
        f2 = true;
    }
}

class Program
{
    static void Main(string[] args)
    {
        var json = JsonConvert.SerializeObject(new Test());
        Console.WriteLine(json);
    }
}

输出到控制台:

{"f1":false,"f2":true}

此外,您可以使用改进的 JSON bool 转换器,它将 C# bool 写入 true/false,并能够从任何大写/小写的 true/false/yes/no/1/0 字符串值读取 bool:

/// <summary>
/// Handles converting JSON string values into a C# boolean data type.
/// </summary>
public class BooleanJsonConverter : JsonConverter
{
    #region Overrides of JsonConverter

    /// <summary>
    /// Determines whether this instance can convert the specified object type.
    /// </summary>
    /// <param name="objectType">Type of the object.</param>
    /// <returns>
    /// <c>true</c> if this instance can convert the specified object type; otherwise, <c>false</c>.
    /// </returns>
    public override bool CanConvert( Type objectType )
    {
        // Handle only boolean types.
        return objectType == typeof(bool);
    }

    /// <summary>
    /// Reads the JSON representation of the object.
    /// </summary>
    /// <param name="reader">The <see cref="T:Newtonsoft.Json.JsonReader"/> to read from.</param>
    /// <param name="objectType">Type of the object.</param>
    /// <param name="existingValue">The existing value of object being read.</param>
    /// <param name="serializer">The calling serializer.</param>
    /// <returns>
    /// The object value.
    /// </returns>
    public override object ReadJson( JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer )
    {
        switch (reader.Value.ToString().ToLower().Trim())
        {
            case "true":
            case "yes":
            case "y":
            case "1":
                return true;
            case "false":
            case "no":
            case "n":
            case "0":
                return false;
        }

        // If we reach here, we're pretty much going to throw an error so let's let Json.NET throw it's pretty-fied error message.
        return new JsonSerializer().Deserialize( reader, objectType );
    }

    /// <summary>
    /// Writes the JSON representation of the object.
    /// </summary>
    /// <param name="writer">The <see cref="T:Newtonsoft.Json.JsonWriter"/> to write to.</param><param name="value">The value.</param><param name="serializer">The calling serializer.</param>
    public override void WriteJson( JsonWriter writer, object value, JsonSerializer serializer )
    {
        writer.WriteValue((bool)value);
    }

    #endregion Overrides of JsonConverter
}

要注册此转换器,请使用以下代码:

JsonConvert.DefaultSettings = () => new JsonSerializerSettings
{
    Converters = new List<JsonConverter>
    {
        new BooleanJsonConverter()
    }
}; 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何让 Newtonsoft 将 bool 序列化为 false,而不是 False 或“false”[关闭] 的相关文章

随机推荐

  • AEM 6.0 Sightly 子节点

    我有一个关于使用 Sightly 访问组件子节点的问题 我有一个模板 它使用 data sly resource 引入基本图像组件 如下所示 div class div 我想做的是根据该图像组件是否实际具有图像集来更改 css 类 为此 我
  • Maven - 如何包含空目录

    默认情况下 在构建过程中 maven 会删除空目录 你知道是否可以在pom中指定一个参数来指示maven在生成的target test classes文件夹中包含空目录 根据这张票 MRESOURCES 36 http jira codeh
  • “DbContextOptionsBuilder”不包含“UseSqlServer”的定义

    我正在尝试使用 C 在 VS 2015 Pro 更新 3 中创建一个 Web API 并针对 NET Core 我正在关注本教程 https docs efproject net en latest platforms aspnetcore
  • Wireshark/tshark 中的 2 通道过滤器

    选项 Y 2 and R in tshark迷惑我很久了 看完说明书我才知道 Y用于单通滤波器和 2在 2 遍过滤器中 如果我们在第 1 遍过滤器结束之前无法获取一些信息 但我还是不明白有什么区别 2 Y blabla and 2 R ba
  • 合并后发出拉取请求的用户不会出现在贡献者列表中

    我有一个回购协议Test GitHub 通知我该用户woo27 谁分叉了我的仓库Test 已经做了一个pull request 这些是官方推荐的合并命令 见下面的截图 git checkout b woo27 master master g
  • 如果 contentedittable = false,如何更改内容样式?

    嘿 我创建了一个可以打开新对话框 一个额外的 HTML 页面 的插件 通过此对话框 用户有机会创建自己的格式模式 我想要什么 我需要一个带有只读文本区域的tinymce编辑器 没问题 但用户必须能够选择粗体 斜体 下划线 字体大小 字体系列
  • JPA 实体和 Hibernate 实体之间的区别

    当我用 Entity 注释一个类并尝试解决依赖关系时 我可以在两个不同的包 javax persistence Entity 和 org hibernate annotations Entity 之间选择包 javax包是JPA的entit
  • 如何从 Vue.js 中深度嵌套的子组件访问数据

    我正在使用 Vue js 构建一个界面 我有一个表格 该表格包含一个地址和其他杂项数据 所以我在Vue中创建了两个组件 UserData and UserAddress UserData包含一个实例UserAddress作为子组件 我想根据
  • $(document).ready 的不同形式

    我见过有人写 document ready function 和一些写作 function 有什么区别以及何时使用什么 是 jQuery 对象本身 它在被调用时实现了一大堆不同的接口 string 运行选择器或构造节点 domElement
  • 单个 CSV 文件中的多个分隔符

    我有一个 CSV 它有三个不同的分隔符 即 和 不同列之间 我如何使用Python解析这个CSV 我的数据如下 2017 01 24 05 19 30 0000 TRANSACTIONDelim secondUSER LOGINDelim
  • 将 iAd 框架和 AdSupport 框架添加到构建阶段 - Xcode 6

    在 Xcode 6 中 如何将 iAd 框架和 AdSupport 框架添加到构建阶段 我转到 构建阶段 页面 但我唯一的选择是添加 新复制文件阶段 新运行脚本阶段 和 新标头阶段 我想要输入的框架属于哪些框架 如何输入这些框架 您应该单击
  • 如何在机器上找到 regasm 位置

    我正在创建一个使用 regasm 将 NET 程序集注册到 COM 的安装程序 不同的客户端将在其计算机上安装不同的 Microsoft Net 版本 我需要提前知道高潮位置才能使用它 我应该只在以下位置寻找它还是还有其他可能的位置 C W
  • Python Regex - 检查大写字母和小写字母

    我正在尝试检查紧随其后的小写字母的大写字母 诀窍在于 在它之前会出现一堆垃圾大写字母和数字 例如 AASKH317298DIUANFProgramming is fun 正如你所看到的 有很多我们不需要的东西直接出现在我们需要的短语之前 P
  • 如何完全迭代 QStandardItemModel?

    我有一个 QStandardItemModel 我将其显示在 QTreeView 中 工作正常 为了突出显示相关行 我想突出显示其中的一些行 因此我有一个 QStringList 其中包含要突出显示的 QStandItem 的名称 QStr
  • 弹簧靴。无法找到“org.hibernate.SessionFactory”类型的 bean

    我似乎无法弄清楚为什么我的 Spring Boot 应用程序无法自动创建 SessionFactory 据我了解 它应该自动获取属性文件并能够创建会话工厂 bean 我需要将一些 Dao 类中的会话工厂与 hibernate 一起使用 但是
  • 应用程序中需要记录多少内容以及多少内容过多?

    只是想知道有多少人登录他们的应用程序 我见过这个 我通常喜欢使用错误日志 级别来记录任何异常 被应用程序捕获 我会用 INFO 日志级别为 第一级别 调试方案显示每当我 进入或退出方法 从那里我 使用DEBUG日志级别进行跟踪 详细资料 致
  • 在 Unix/Linux 中将文件移动到不同目录所需的权限[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想澄清所需的权限 以便将文件 A 从目录 B 移动到目录 C 我认为命令是 mv B A C A 名称不变 我认为需要以下内容是否正确
  • 使用 Selenium 2 执行复制和粘贴

    有没有办法使用 Selenium 2 和 Python 绑定执行复制和粘贴 我突出显示了要复制的元素 然后执行以下操作 copyActionChain key down Keys COMMAND send keys C key up Key
  • 涉及 XSS 时,htmlspecialchars 与 htmlentities

    我看到了很多关于这个问题的相互矛盾的答案 许多人喜欢引用这样的话 仅靠 php 函数并不能保护您免受 xss 攻击 到底哪些 XSS 可以通过 htmlspecialchars 进行攻击 哪些 XSS 可以通过 htmlentities 进
  • 如何让 Newtonsoft 将 bool 序列化为 false,而不是 False 或“false”[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 如果我序列化一个 bool 值 我会得到这样的结果 myboolValue False 我意识到这是由于微软的ToStr