zoukankan      html  css  js  c++  java
  • .net core中关于System.Text.Json的使用

      在.Net Framework的时候序列化经常使用Newtonsoft.Json插件来使用,而在.Net Core中自带了System.Text.Json,号称性能更好,今天抽空就来捣鼓一下。

      使用起来其实也很简单,就是有些地方要注意,比如在我们的对象实体中有中文的话,直接序列化时中文会被转换成编码格式,时间格式序列化时会被转成默认的格式等。

      下面就直接上Demo的代码了

    using System;
    using System.Text.Encodings.Web;
    using System.Text.Json;
    using System.Text.Json.Serialization;
    using System.Text.Unicode;
    
    namespace ConsoleApp4
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine("Hello World!");
    
                var user = new User{ 
                    Id= 1,
                    Name = "张三李四",
                    Gender = Gender.Male,
                    Email="Jesen@qq.com",
                    CreatedTime = DateTime.Now
                };
    
                JsonSerializerOptions options = new JsonSerializerOptions();
                options.Encoder = JavaScriptEncoder.Create(UnicodeRanges.All); //解决中文序列化被编码的问题
                options.Converters.Add(new DateTimeConverter()); //解决时间格式序列化的问题
    
                var serializeString = JsonSerializer.Serialize(user, options);
                Console.WriteLine(serializeString);
    
    
                User obj = JsonSerializer.Deserialize<User>(serializeString,options);
    
    
                Console.ReadLine();
            }
        }
    
        class User
        {
            public int Id { get; set; }
    
            public string Name { get; set; }
    
            [JsonConverter(typeof(JsonStringEnumConverter))] //解决枚举序列化时被转成数值的问题
            public Gender Gender { get; set; }
    
            public string Email { get; set; }
    
            public DateTime CreatedTime { get; set; }
        }
    
    
        enum Gender
        {
            Male,
    
            FaleMale
        }
    
    
        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"));
            }
        }
        
    }
  • 相关阅读:
    PBE加密 .net 实现
    手把手教你写一个windows服务 【基于.net】 附实用小工具{注册服务/开启服务/停止服务/删除服务}
    fish redux 个人理解
    .net Core 图片验证码 基于SkiaSharp实现
    .net core webapi jwt 更为清爽的认证 ,续期很简单(2)
    js删除数组对象中符合条件的数据
    编译.net .net Core程序 代码,仅做备份
    Mybatis架构相关的知识
    java选择题知识总结大全
    Mybatis详解(二) sqlsession的创建过程
  • 原文地址:https://www.cnblogs.com/jesen1315/p/12023760.html
Copyright © 2011-2022 走看看