zoukankan      html  css  js  c++  java
  • NetCore3 System.Text.Json 的使用 控制台

    添加程序集:System.Text.Json

    using System.Text.Json;
    using System.Text.Json.Serialization;

    响应时间格式,中文乱码,响应驼峰命名

      services.AddControllers(x=>
                {
                    //x.Filters.Add();
                }) 
                  .AddJsonOptions(options=>
                  {
                      //options.JsonSerializerOptions.PropertyNamingPolicy = System.Text.Json.JsonNamingPolicy.CamelCase;
                      options.JsonSerializerOptions.PropertyNamingPolicy = null; //响应驼峰命名
                      options.JsonSerializerOptions.Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping;//中文乱码
                      options.JsonSerializerOptions.Converters.Add(new Common.SystemTextJsonConvert.DateTimeConverter());//应时间格式
                      options.JsonSerializerOptions.Converters.Add(new Common.SystemTextJsonConvert.DateTimeNullableConverter()); //应时间格式
                  }).SetCompatibilityVersion(CompatibilityVersion.Version_3_0);
      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"));
                }
            }
        }

    获取默认JsonSerializerOptions  对象:

     public static class JsonOpt
        {
            public static JsonSerializerOptions UnicodeRangesAll
            {
                get { return  DefaultOptions(); }
            }
    
            public static JsonSerializerOptions IgnoreNullValues
            {
                get 
                { 
                    JsonSerializerOptions options = DefaultOptions();
                    options.IgnoreNullValues = true;
                    return options;
                }
            }
    
            public static JsonSerializerOptions DefaultOptions(string dateTimeFormat = "yyyy-MM-dd HH:mm:ss")
            {
                JsonSerializerOptions Options = new JsonSerializerOptions() { PropertyNamingPolicy = null, WriteIndented = true, Encoder = System.Text.Encodings.Web.JavaScriptEncoder.Create(UnicodeRanges.All) };
                Options.Converters.Add(new DateTimeConverterUsingDateTimeParse(dateTimeFormat));
                return Options;
            }
        }

    注册服务代码其实还是可以优化的,有时间的朋友去搞吧!

    付:

    控制台  System.Text.Json  中文乱码问题:

    var options = new JsonSerializerOptions();
                options.Encoder = System.Text.Encodings.Web.JavaScriptEncoder.Create(UnicodeRanges.All);
                var json = JsonSerializer.Serialize(new { title = "代码改变世界" }, options);
  • 相关阅读:
    maven项目添加Gson的依赖后无法启动,报错BeanCreationException:Error creating bean with name 'gsonBuilder'
    'bool' object is not callable
    UnicodeDecodeError: 'gbk' codec can't decode byte 0xa6 in position 9737: illegal multibyte sequence
    django.contrib.auth.middleware.AuthenticationMiddleware' must be in MIDDLEWARE in order to use the admin application.
    ForeignKey(unique=True) is usually better served by a OneToOneField.
    NameError: name 'reload' is not defined
    No module named 'django.core.urlresolvers'
    No module named 'ckeditor'
    [Docker] Leverage a Docker Maven plugin
    [Docker] Separate application image from database migration
  • 原文地址:https://www.cnblogs.com/wfpanskxin/p/12920525.html
Copyright © 2011-2022 走看看