zoukankan      html  css  js  c++  java
  • .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配置序列化操作

  • 相关阅读:
    wince 下,拨号成功,但不能打开网页的问题
    Wince platform configure filesdetail
    WINCE ERRORMSG
    wince 6 s3c2440 io port opearation
    wince 6 kernel configure files
    赞cnblogs
    WINCE DEBUGMSG
    POJ3249 Test for Job DAG最短路
    HDU4552 怪盗基德的挑战书 KMP | 后缀数组 | 暴力
    HDU4554 叛逆的小明 水题
  • 原文地址:https://www.cnblogs.com/tianma3798/p/14090008.html
Copyright © 2011-2022 走看看