序列化_.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 - 串行化/反串行化,快速 

418a65c132a22f04ce2d8aaeb2bb9d3c.png

二、序列化使用介绍

1.默认序列化器,仅支持 asnii编码 格式,以提升效率

f8114e8729620a7f67d22f655aedd0f4.png

//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"}

f8114e8729620a7f67d22f655aedd0f4.png

2. JsonSerializerOptions 常用序列化配置

f8114e8729620a7f67d22f655aedd0f4.png

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);

f8114e8729620a7f67d22f655aedd0f4.png

3.日期格式化 处理 

1.定义扩展类,重写输出方法

d0bf2ce95bb7581aa63ee6288f9e0f87.png

f8114e8729620a7f67d22f655aedd0f4.png

    public class SystemTextJsonConvert
{public class DateTimeConverter : JsonConverter
{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
{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"));
}
}
}

f8114e8729620a7f67d22f655aedd0f4.png

2.在Options中增加处理

//日期格式化
options.Converters.Add(new SystemTextJsonConvert.DateTimeConverter());

4. 属性忽略  [JsonIgnore()]

f8114e8729620a7f67d22f655aedd0f4.png

        public class Student
{public int ID { get; set; }public string Name { get; set; }public DateTime Birthday { get; set; }
[JsonIgnore()]public int? School { get; set; }
}

f8114e8729620a7f67d22f655aedd0f4.png

三、反序列化使用介绍

JsonSerializer.Deserialize(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

版权申明:本文来源于网友收集或网友提供,如果有侵权,请转告版主或者留言,本公众号立即删除。

c1d63735e1145495fff7cbf90635b39c.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值