当前位置: 首页 > news >正文

C#调用Newtonsoft.Json将bool序列化为int

  使用Newtonsoft.Json将数据对象序列化为Json字符串时,如果有布尔类型的属性值时,一般会将bool类型序列化为字符串,true值序列化为true,false值序列化为false。如下面的类型序列化后的结果如下:

public class UserInfo
{public string Name { get; set; }public string Email { get; set; }public string Password { get; set; }public bool isActive { get; set; }
}UserInfo user = new UserInfo();
user.Name = "Test";
user.Email = "123456@qq.com";
user.isActive = true;Console.WriteLine(JsonConvert.SerializeObject(user));

在这里插入图片描述
  如果序列化时需要将布尔值序列化为数字,则需要借助JsonConverter特性类指定专门的转换类执行转换操作,但Newtonsoft.Json.Converters命名空间下并没有提供相应的转换类,需要继承JsonConverter或者JsonConverter类自定义转换类。
在这里插入图片描述

  本文测试时定义Bool2IntConverter并继承自类JsonConverter,后者中的主要方法及属性定义如下,由于仅测试序列化,因此在Bool2IntConverter中仅需着重处理WriteJson和CanConvert即可,主要代码如下:
在这里插入图片描述

public class Bool2IntConverter : JsonConverter
{public override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer){if (value == null){writer.WriteValue(0);return;}bool bValue=(bool)value;writer.WriteValue(bValue?1:0);}public override object? ReadJson(JsonReader reader, Type objectType, object? existingValue, JsonSerializer serializer){return null;}public override bool CanConvert(Type objectType){if (objectType == typeof(Boolean) || objectType == typeof(Boolean?)){return true;}return false;}
}

  使用Bool2IntConverter类的方式及测试结果如下所示:

 public class UserInfo{public string Name { get; set; }public string Email { get; set; }public string Password { get; set; }[JsonConverter(typeof(Bool2IntConverter))]public bool isActive { get; set; }}

在这里插入图片描述

参考文献:
[1]百度AI自动生成
[2]https://www.cnblogs.com/yanweidie/p/4605212.html

相关文章:

  • HttpServletRequest getHeader、getHeaders、getIntHeader、getDateHeader区别
  • EMI兼容测试方案——匹配不同测试标准,准确高效!
  • STM32-串口解析框架
  • 使用Nginx和Fancyindex组合搭建文件下载站点详细教程
  • 【Linux】Shell 命令以及运行原理
  • 【Linux】进程退出和进程等待
  • 单点安装3.6.23_ubuntu18.04
  • 前端构建工具对比 webpack、vite、esbuild等
  • 广和通AI解决方案“智”赋室外机器人迈向新天地!
  • 使用Python自动化操作手机,自动执行常见任务,例如滑动手势、呼叫、发送短信等等
  • 【SpringCloud Alibaba】 介绍及微服务模块搭建
  • 基于Spring+mybatis+vue的社区健康管理系统(Java毕业设计)
  • C++ :命名空间域
  • mysql学习打卡day16
  • 敏捷测试和DevOpes自动化测试的区别
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • bootstrap创建登录注册页面
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • scrapy学习之路4(itemloder的使用)
  • spring-boot List转Page
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • webpack项目中使用grunt监听文件变动自动打包编译
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 深入浅出Node.js
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 通信类
  • 为什么要用IPython/Jupyter?
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • const的用法,特别是用在函数前面与后面的区别
  • 从如何停掉 Promise 链说起
  • 昨天1024程序员节,我故意写了个死循环~
  • $.ajax()参数及用法
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (3)(3.5) 遥测无线电区域条例
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (Ruby)Ubuntu12.04安装Rails环境
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (二)windows配置JDK环境
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • .dwp和.webpart的区别
  • .Net 8.0 新的变化
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .NET I/O 学习笔记:对文件和目录进行解压缩操作
  • .NET开发者必备的11款免费工具
  • .Net中wcf服务生成及调用
  • @autowired注解作用_Spring Boot进阶教程——注解大全(建议收藏!)
  • [ vulhub漏洞复现篇 ] Jetty WEB-INF 文件读取复现CVE-2021-34429
  • [ 代码审计篇 ] 代码审计案例详解(一) SQL注入代码审计案例
  • [ 英语 ] 马斯克抱水槽“入主”推特总部中那句 Let that sink in 到底是什么梗?