简介
System.Text.Json 组件是从 .Net Core 3.0 版本开始提供的,该组建的宗旨是提高序列化 json 字符串的效率。
正文
之前我有写过 序列化与反序列化 这个文章,其中用的是 Newtonsoft.Json 组件,现在我们可以使用 System.Text.Json 来替换掉他了。
1 | var names = new string[] { "Steve", "Alice", "张三", "李四" }; |
会遇到的问题
输出的 json 中文被编码(乱码)的问题
解决方法1
在每次进行序列化时进行配置
1 | var names = new string[] { "Steve", "Alice", "张三", "李四" }; |
解决方法2
在 Asp.Net Core 中我们可以在 services 中进行配置
1 | services.AddControllersWithViews().AddJsonOptions(options => |
这样输出就不会有中文被编码的情况了
1 | ["Steve","Alice","张三","李四"] |
格式化时间问题
1 | var times = new DateTime[] { DateTime.Now, DateTime.Now.AddDays(1) }; |
输出
1 | ["2020-11-23T22:27:06.8656543+08:00","2020-11-24T22:27:06.8668047+08:00"] |
你会发现它的格式为 yyyy-MM-ddThh:mm:ss 这样的格式,实际上在 System.Text.Json 中唯一支持的格式是 ISO 8601-1:2019 也就是刚才的那种格式。
一般我们前端使用的格式是 yyyy-MM-dd hh:mm:s` 或者 yyyy-MM-dd` 这样的,总之中间不加 “T” 这个字母
解决方案
新建 DateTimeConverterUsingDateTimeParse 类
1 | public class DateTimeConverterUsingDateTimeParse : JsonConverter<DateTime> |
1 | JsonSerializerOptions options = new JsonSerializerOptions(); |
输出
1 | ["2020-11-23","2020-11-24"] |
如果是 Asp.Net Core 应用程序 我们可以 startup 中使用 services 配置全局
1 | services.AddControllers().AddJsonOptions(options => |
更多问题请参考