.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":"\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"));
            }
        }
    }
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配置序列化操作

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM