.Net Core 5.0 Json序列化和反序列化 | System.Text.Json 的json序列化和反序列化
一、.Net Core 5.0 Json序列化和反序列化 | System.Text.Json 的json序列化和反序列化
注意: .Net Core 5.0中的序列化和反序列化 ,沿用.Net Core 3.0版本的类封装
JsonSerializer 静态类
JSON API:
-
Utf8JsonReader - 读操作,快速,低级
-
Utf8JsonWriter - 写操作,快速,低级
-
JsonDocument - 基于DOM,快速
-
JsonSeriliazer - 串行化/反串行化,快速
二、序列化使用介绍
1.默认序列化器,仅支持 asnii编码 格式,以提升效率
//json对象 Student stu = new Student() { ID = 1, Name = "张三丰", Birthday = DateTime.Now }; string stuStr1 = JsonSerializer.Serialize(stu); Console.WriteLine(stuStr1); _log.WriteLine(stuStr1);//{"ID":1,"Name":"\u5F20\u4E09\u4E30","Birthday":"2020-12-05T13:23:03.099035+08:00"}
2. JsonSerializerOptions 常用序列化配置
JsonSerializerOptions options = new JsonSerializerOptions(); //日期格式化 options.Converters.Add(new SystemTextJsonConvert.DateTimeConverter()); //设置支持中文的unicode编码 options.Encoder = JavaScriptEncoder.Create(UnicodeRanges.All); //启用驼峰格式 options.PropertyNamingPolicy = JsonNamingPolicy.CamelCase; //启用缩进设置 options.WriteIndented = true; string stuStr2=JsonSerializer.Serialize(stu, options); _log.WriteLine(stuStr2);
3.日期格式化 处理
1.定义扩展类,重写输出方法

public class SystemTextJsonConvert { public class DateTimeConverter : JsonConverter<DateTime> { public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { return DateTime.Parse(reader.GetString()); } public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options) { writer.WriteStringValue(value.ToString("yyyy-MM-dd HH:mm:ss")); } } public class DateTimeNullableConverter : JsonConverter<DateTime?> { public override DateTime? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { return string.IsNullOrEmpty(reader.GetString()) ? default(DateTime?) : DateTime.Parse(reader.GetString()); } public override void Write(Utf8JsonWriter writer, DateTime? value, JsonSerializerOptions options) { writer.WriteStringValue(value?.ToString("yyyy-MM-dd HH:mm:ss")); } } }
2.在Options中增加处理
//日期格式化 options.Converters.Add(new SystemTextJsonConvert.DateTimeConverter());
4. 属性忽略 [JsonIgnore()]
public class Student { public int ID { get; set; } public string Name { get; set; } public DateTime Birthday { get; set; } [JsonIgnore()] public int? School { get; set; } }
三、反序列化使用介绍
JsonSerializer.Deserialize<T>(str);
虽然 自带的json序列化速度快,但是还是习惯用Newtonsoft.Json ,JObject,JArray 还是相当好用的,呵呵,点击查看https://blog.csdn.net/u011127019/category_6548119.html。
更多:
C# Newtonsoft.Json之LINQ To Json实例(二)
C# Newtonsoft.Json JObject合并对象整理
C# Newtonsoft.Json JsonSerializerSettings配置序列化操作
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
2014-12-05 要将程序集“xxx.dll”标记为系统必备组件,必须对其进行强签名
2014-12-05 ServiceAccount 枚举
2014-12-05 无法安装或运行此应用程序。该应用程序要求首先在"全局程序集缓存(GAC)"中安装程序集