System.Text.Json 使用

参考:https://www.cnblogs.com/RainFate/p/15720684.html

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

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

 1.读取与写入

// 读取
var str = File.ReadAllText(fileName);
var data = JsonSerializer.DeserializeObject<List<Demo>>(str);

// 写入
str = JsonSerializer.Serialize(DemoEntity);
File.WriteAllText(fileName, str);

 2.格式化json字符串

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

 3.反序列化

public static T ToObject<T>(this string jsonStr)
{
    return JsonSerializer.Deserialize<T>(jsonStr);
}

 4.小驼峰格式反序列化

/// <summary>
/// 小驼峰格式序列化。
/// </summary>
/// <typeparam name="T">对象类型</typeparam>
/// <param name="entity">类型对象</param>
/// <returns></returns>
public static string SerializeWithCamel<T>(this T entity)
{
    // 小驼峰序列化
    var setting = new JsonSerializerOptions
    {
        PropertyNamingPolicy = JsonNamingPolicy.CamelCase
    };
    return JsonSerializer.Serialize(entity, setting);
}

 5.小驼峰格式反序列化

/// <summary>
/// 小驼峰格式反序列化。
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="str"></param>
/// <returns></returns>
public static T DeserializeWithCamel<T>(this string str)
{
    if (str != null)
    {
        // 小驼峰序列化
        var setting = new JsonSerializerOptions
        {
            PropertyNamingPolicy = JsonNamingPolicy.CamelCase
        };
        return JsonSerializer.Deserialize<T>(str, setting);
    }
    else
    {
        return default(T);
    }
}

 序列化时要求输出值都默认带双引号

string pattern = @":([0-9]{10,})";
MatchCollection matches = Regex.Matches(json, pattern);
Regex regex = new Regex(pattern);
var ouputStr = regex.Replace(json, ":\"$1\"");

 WebApi 自定义时间输出格式

public class DateTimeJsonConverter : 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"));
        }
}

  WebApi 自定义全小写输出格式

/// <summary>
/// 返回对象全小写
/// </summary>
public class LowercasePolicy : JsonNamingPolicy
{
    public override string ConvertName(string name) =>
        name.ToLower();
}

 

Program.cs 全局配置

builder.Services.AddControllers().AddJsonOptions(options =>
{ 
    //自定义输出的时间格式 options.JsonSerializerOptions.Converters.Add(new DateTimeJsonConverter());
  //自定义输出的全小写
    option.JsonSerializerOptions.PropertyNamingPolicy = new LowercasePolicy();
});

 其他配置

services.AddJsonOptions(options =>
{
              //格式化日期时间格式
              options.JsonSerializerOptions.Converters.Add(new DatetimeJsonConverter());
              //数据格式首字母小写
              //options.JsonSerializerOptions.PropertyNamingPolicy =JsonNamingPolicy.CamelCase;
              //数据格式原样输出
              options.JsonSerializerOptions.PropertyNamingPolicy = null;
              //取消Unicode编码,解决后端返回数据中文被编码
              options.JsonSerializerOptions.Encoder = JavaScriptEncoder.Create(UnicodeRanges.All);
              //忽略空值
              options.JsonSerializerOptions.IgnoreNullValues = true;
              //允许额外符号
              options.JsonSerializerOptions.AllowTrailingCommas = true;
              //反序列化过程中属性名称是否使用不区分大小写的比较
              options.JsonSerializerOptions.PropertyNameCaseInsensitive = false;
});

 

posted @ 2023-06-10 03:06  microsoft-zhcn  阅读(685)  评论(0)    收藏  举报