• .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":"u5F20u4E09u4E30","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"));
                }
            }
        }
    View Code

    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配置序列化操作

  • 相关阅读:
    生命中的另一口井
    sqlldr使用小记
    字节单位介绍
    《Java虚拟机》随笔记01
    Python生成器实现杨辉三角打印
    什么是递归?用十进制转二进制的Python函数示例说明
    Python的filter与map内置函数
    Python内置函数property()使用实例
    Python装饰器的理解
    Python迭代与递归方法实现斐波拉契数列
  • 原文地址:https://www.cnblogs.com/tianma3798/p/14090008.html
Copyright © 2020-2023  润新知