.NET修仙传
.NET WebAPI中FromRoute、FromQuery、FromBody的关键角色与用法
C# 新用法
C#基础语法与数据类型
序列化
C# 7.0
模式匹配Pattern Matching
优秀实用的类库推荐
2024年C#优秀实用的类库推荐
依赖注入与中间件
依赖注入
查询所有已注入的服务
WebApi实现批量注入
原生依赖注入
自动依赖注入框架
优秀中间件
依赖注入
Autofac
生命周期
文档操作
PDF操作
PDF合并及生成书签目录
Excel操作
几个Excel文件合并去重分类
Excel文件之COM组件方式
操作Excel文件之NPOI
INI文件
面试宝典
WebService、WCF、WebAPI、一般处理程序
C# 线程和进程的区别
asp.net core 服务生命周期
asp.net core 的中间件都有哪些
操作系统编程
获取搜狗输入法中英文
com组件集成
执行系统命令
通过句柄嵌入exe窗体程序
windows-开机自启动
程序调用cmd命令生成WCF服务的客户端调用文件
获取电脑信息
键盘记录器
键盘改键功能
监听鼠标操作
性能监控
Stopwatch轻松测量执行时间
MethodTimer.Fody 监控方法执行耗时
框架揭秘
01编程初体验
中间件 Middleware
路由
配置管理
配置系统
配置管理
日志管理
Log4Net
NLog
.net core原始日志记录
日志管理
Serilog
ORM
EF Core初始化
EF Core的实体类配置
执行原生SQL语句
EF Core
操作sqlite
操作Mysql数据库
操作LiteDB
AutoMapper高效实现对象映射
AutoMapper
AutoMapper 10个常用方法总结
缓存
Redis支持哪几种数据类型?
什么是Redis?简述它的优缺点?
Redis相比memcached有哪些优势?
认证
什么是 JWT?它是如何工作的?
.net framework jwt
.net core Jwt操作
认证管理
.Net WebApi校验Token/参数的几种方式
鉴权授权
Authorization的几种方式
基础语法
集合
1、C#中常用集合类型
yield return 简化迭代并提高代码质量
AOP
.net core AOP
操作筛选器
网络编程
TCP 连接的前世今生
HttpRequest,WebRequest,HttpWebRequest,WebClient,HttpClient 之间的区别
网络编程
WebApi获取客户信息
通信
HTTP通信
公共类-HttpHelper
多线程编程
十种线程方式分析
Task-筑基期
parallel-筑基
消息队列
构建高性能 API 的高级技术
优秀教程网站
每日学习地址
全套教程汇总
理解ASP.NET Core
定时任务
定时器的三种使用方式
定时任务之windows任务计划程序
创建任务到Windows任务计划程序
定时任务之Quartz.Net
IHostedService启动时运行定时任务
学习网站
JSON序列化反序列化工具
前辈
发布部署
应用部署
GRPC
使用GRPC多个proto文件
.net 学习路线图
JSON操作
格式化JSON字符串
System.Text.Json
序列时对DataContract的支持情况
本文档使用 MrDoc 发布
-
+
首页
System.Text.Json
https://blog.csdn.net/u010476739/article/details/129337119 # 一、写入时的控制 System.Text.Json.JsonSerializerOptions的属性清单 | 描述 | 属性 | 值 | | --- | --- | --- | | 汉字显示 | Encoder | System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping | | 首字母小写 | PropertyNamingPolicy | System.Text.Json.JsonNamingPolicy.CamelCase | | 字典key首字母小写 | DictionaryKeyPolicy | System.Text.Json.JsonNamingPolicy.CamelCase | | 缩进格式输出 | WriteIndented | true | | 枚举转成字符串输出 | options.Converters.Add | new System.Text.Json.Serialization.JsonStringEnumConverter() | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ```java var options = new System.Text.Json.JsonSerializerOptions { //汉字 Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping, //属性名首字母小写 PropertyNamingPolicy = System.Text.Json.JsonNamingPolicy.CamelCase, //字典key首字母小写 DictionaryKeyPolicy = System.Text.Json.JsonNamingPolicy.CamelCase, //缩进输出 WriteIndented = true, //忽略null值属性的输出 DefaultIgnoreCondition = System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull, //忽略循环引用 ReferenceHandler = System.Text.Json.Serialization.ReferenceHandler.IgnoreCycles, // 允许输出Field(默认情况下,Field不会被输出) IncludeFields = true, // 不输出只读Field(默认输出) IgnoreReadOnlyFields = true, // 不输出只读属性(默认输出) IgnoreReadOnlyProperties = true, //输出是 number => string, 读取时允许 string => number(慎用) NumberHandling = System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString | System.Text.Json.Serialization.JsonNumberHandling.WriteAsString, //忽略默认值的属性(慎用) DefaultIgnoreCondition = System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingDefault, }; // 举转成字符串 options.Converters.Add(new System.Text.Json.Serialization.JsonStringEnumConverter()); //自定义日期格式(DateTime、DateTimeOffset) options.Converters.Add(new JsonConverterDatetime("yyyy-MM-dd HH:mm:ss.fff zz")); options.Converters.Add(new JsonConverterDateTimeOffset("yyyy-MM-dd HH:mm:ss.fff zz")); //支持输出 DateOnly、TimeOnly //默认.net 6 (.net7可以)不支持 DateOnly、TimeOnly options.Converters.Add(new JsonConverterDateOnly("yyyy-MM-dd")); options.Converters.Add(new JsonConverterTimeOnly("HH:mm:ss.fffffff")); ``` ```java public class JsonConverterDatetime : System.Text.Json.Serialization.JsonConverter<DateTime> { public string Format { get; set; } public JsonConverterDatetime(string format) { if (format == null) throw new ArgumentNullException("format"); Format = format; } public override DateTime Read(ref System.Text.Json.Utf8JsonReader reader, Type typeToConvert, System.Text.Json.JsonSerializerOptions options) { return DateTime.Parse(reader.GetString()); } public override void Write(System.Text.Json.Utf8JsonWriter writer, DateTime value, System.Text.Json.JsonSerializerOptions options) { writer.WriteStringValue(value.ToString(Format)); } } public class JsonConverterDateTimeOffset : System.Text.Json.Serialization.JsonConverter<DateTimeOffset> { public string Format { get; set; } public JsonConverterDateTimeOffset(string format) { if (format == null) throw new ArgumentNullException("format"); Format = format; } public override DateTimeOffset Read(ref System.Text.Json.Utf8JsonReader reader, Type typeToConvert, System.Text.Json.JsonSerializerOptions options) { return DateTimeOffset.Parse(reader.GetString()); } public override void Write(System.Text.Json.Utf8JsonWriter writer, DateTimeOffset value, System.Text.Json.JsonSerializerOptions options) { writer.WriteStringValue(value.ToString(Format)); } } public class JsonConverterDateOnly : System.Text.Json.Serialization.JsonConverter<DateOnly> { public string Format { get; set; } public JsonConverterDateOnly(string format) { if (format == null) throw new ArgumentNullException("format"); Format = format; } public override DateOnly Read(ref System.Text.Json.Utf8JsonReader reader, Type typeToConvert, System.Text.Json.JsonSerializerOptions options) { return DateOnly.Parse(reader.GetString()); } public override void Write(System.Text.Json.Utf8JsonWriter writer, DateOnly value, System.Text.Json.JsonSerializerOptions options) { writer.WriteStringValue(value.ToString(Format)); } } public class JsonConverterTimeOnly : System.Text.Json.Serialization.JsonConverter<TimeOnly> { public string Format { get; set; } public JsonConverterTimeOnly(string format) { if (format == null) throw new ArgumentNullException("format"); Format = format; } public override TimeOnly Read(ref System.Text.Json.Utf8JsonReader reader, Type typeToConvert, System.Text.Json.JsonSerializerOptions options) { return TimeOnly.Parse(reader.GetString()); } public override void Write(System.Text.Json.Utf8JsonWriter writer, TimeOnly value, System.Text.Json.JsonSerializerOptions options) { writer.WriteStringValue(value.ToString(Format)); } } ``` 在类定义时声明忽略某些属性 ```java [System.Text.Json.Serialization.JsonIgnore] public int Age { get; set; } ``` 在类定义时声明控制属性输出的顺序 ```java [System.Text.Json.Serialization.JsonPropertyOrder(Order = 0)] public int Age { get; set; } ``` 在类定义时声明控制属性输出的名称 ```java [System.Text.Json.Serialization.JsonPropertyName("catAge")] public int Age { get; set; } ``` # 1、汉字(非ascii码转换) ```java var str = System.Text.Json.JsonSerializer.Serialize(new Model { Id = 1, Name = "小明" }, new System.Text.Json.JsonSerializerOptions { Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping }); //out: {"Id":1,"Name":"小明"} public class Model { public int Id { get; set; } public string Name { get; set; } } ``` # 二、读取时控制(反序列化为模型) ```java var options = new System.Text.Json.JsonSerializerOptions { //允许json中多余的逗号 AllowTrailingCommas = true, //因为我们是直接反序列化为模型,所以这里 跳过注释 ReadCommentHandling = System.Text.Json.JsonCommentHandling.Skip, //※允许将 "123" 转为数字 123 NumberHandling = System.Text.Json.Serialization.JsonNumberHandling.AllowReadingFromString, //※忽略属性名大小写(默认大小写敏感) PropertyNameCaseInsensitive = true }; ``` # 三、内置对象 类似 Newtonsoft,在没有实体类的情况下,也可以使用JsonNode/JsonValue/JsonArray/JsonObject操作json。  ## 读取数据 ```java using System.Text.Json.Nodes; string jsonString = @" { ""Name"":""小明"", ""Age"":20, ""Birth"":""2003-01-01"", ""Ext"":{ ""Addrs"":[""天明路"",null], ""Scores"":[95,98,82], ""Desc"":""测试"" } } "; JsonNode node = JsonNode.Parse(jsonString)!; //GetValue 和 强转都可以 var name = node["Name"].GetValue<string>(); var age = (int)node["Age"]!; var birth = (DateTime)node["Birth"]!; Console.WriteLine($"name={name},age={age},birth={birth}"); //下探 var desc = (string)node["Ext"]["Desc"]!; var addr1 = node["Ext"]["Addrs"][0].GetValue<string>(); var addr2 = (string?)node["Ext"]["Addrs"][1];//这里因为本身为null,使用GetValue方法会报错 Console.WriteLine($"desc={desc},addr1={addr1},addr2={addr2}"); //数组访问 foreach (var i in node["Ext"]["Scores"].AsArray()) { var score = i.GetValue<float>(); Console.WriteLine($"score={score}"); } ``` ## 写入数据 ```java using System.Text.Json.Nodes; var ageKey = "Age"; var node = new JsonObject { ["Name"] = "小明", [ageKey] = 20, ["Birth"] = "2003-01-01", ["Ext"] = new JsonObject { ["Addrs"] = new JsonArray("天明路", null), ["Desc"] = "测试", } }; node["Ext"]["Desc"] = new JsonArray(95, 98); node["Ext"]["Desc"].AsArray().Add(82); Console.WriteLine(node.ToJsonString(new System.Text.Json.JsonSerializerOptions { Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping, WriteIndented = true, })); Console.WriteLine("ok"); ```
孙端己
2025年2月22日 10:57
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码