.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。
出处:
https://www.cnblogs.com/tianma3798/archive/2004/01/13/14090008.html