zoukankan      html  css  js  c++  java
  • System.Text.Json

    在.NET Core 3.0中加入了对JSON的内置支持。

    序列化

    using System.Text.Json;
    using System.Text.Json.Serialization;
    
    JsonSerializer.Serialize(DemoEntity)
    

    时间格式化

    /// <summary>
    /// 自定义时间转化器
    /// </summary>
    public class DateTimeConverterUsingDateTimeParse : 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("yyyyMMddHHmmss"));
        }
    }
    

    JsonSerializerOptions options = new JsonSerializerOptions();
    options.Converters.Add(new DateTimeConverterUsingDateTimeParse());
    string jsonString = JsonSerializer.Serialize(data, options);

    序列化扩展

    /// <summary>
    /// 小驼峰格式反序列化。
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="str"></param>
    /// <returns></returns>
    public static T DeserializeWithCamel<T>(string str)
    {
        if (str != null)
        {
            // 小驼峰序列化
            var setting = new JsonSerializerOptions
            {
                PropertyNamingPolicy = JsonNamingPolicy.CamelCase
            };
            return JsonSerializer.Deserialize<T>(str, setting);
            // Newtonsoft
            var setting = new JsonSerializerSettings
            {
                ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver(),
            };
            return JsonConvert.DeserializeObject<T>(str, setting);
        }
        else
        {
            return default(T);
        }
    }
    /// <summary>
    /// 小驼峰格式序列化。
    /// </summary>
    /// <typeparam name="T">对象类型</typeparam>
    /// <param name="entity">类型对象</param>
    /// <returns></returns>
    public static string SerializeWithCamel<T>(T entity)
    {
        // 小驼峰序列化
        var setting = new JsonSerializerOptions
        {
            PropertyNamingPolicy = JsonNamingPolicy.CamelCase
        };
        return JsonSerializer.Serialize(entity, setting);
        // Newtonsoft
        var setting = new JsonSerializerSettings
        {
            ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver(),
        };
        return JsonConvert.SerializeObject(entity, setting);
    }
    

    格式化json字符串

    .NET Core版本

    /// <summary>
    /// 格式化JSON字符串
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="obj"></param>
    /// <returns></returns>
    public static string ConvertJsonString<T>(T obj)
    {
        if (obj != null)
        {
            var setting = new JsonSerializerOptions
            {
                WriteIndented = true,
            };
            return JsonSerializer.Serialize(obj, setting);
        }
        return string.Empty;
    }
    

    Newtonsoft版本

    using Newtonsoft.Json;
    using Newtonsoft.Json.Serialization;
    /// <summary>
    /// 格式化JSON字符串
    /// </summary>
    /// <typeparam name="T">对象类型</typeparam>
    /// <param name="obj">类型对象</param>
    /// <returns></returns>
    public static string ConvertJsonString<T>(T obj)
    {
        if (obj != null)
        {
            JsonSerializer serializer = new JsonSerializer();
            StringWriter writer = new StringWriter();
            JsonTextWriter jwriter = new JsonTextWriter(writer)
            {
                Formatting = Formatting.Indented,
                Indentation = 4,
                IndentChar = ' ',
            };
            serializer.Serialize(jwriter, obj);
            return writer.ToString();
        }
        return string.Empty;
    }
    

    若是序列化后的字符串,不知道相应的对象类型,可以如下转换:

    public static string ConvertJsonString(string str)
    {
        try
        {
            JsonSerializer serializer = new JsonSerializer();
            TextReader tr = new StringReader(str);
            JsonTextReader jtr = new JsonTextReader(tr);
            object obj = serializer.Deserialize(jtr);
            if (obj != null)
            {
                StringWriter writer = new StringWriter();
                JsonTextWriter jwriter = new JsonTextWriter(writer)
                {
                    Formatting = Formatting.Indented,
                    Indentation = 4,
                    IndentChar = ' ',
                };
                serializer.Serialize(jwriter, obj);
                return writer.ToString();
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
        return str;
    }
    
  • 相关阅读:
    编译原理 实例
    lex yacc flex bison
    图解tensorflow 源码分析
    PostgreSQL 179个场景 案例集锦
    github view source
    Java 微服务实践
    Linux kernel AIO
    Lex与Yacc学习
    OpenResty 通过 Lua 扩展 NGINX 实现的可伸缩的 Web 平台
    nginx Architecture
  • 原文地址:https://www.cnblogs.com/wesson2019-blog/p/14719268.html
Copyright © 2011-2022 走看看