src/01_Utils/Utils/Json/JsonHelper.cs

(开头部分) 2KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

using System;
using System.Text.Encodings.Web;
using System.Text.Json;
using Mkh.Utils.Annotations;
using Mkh.Utils.Json.Converters;

namespace Mkh.Utils.Json;

/// <summary>
/// JSON序列化帮助类
/// <para>该帮助类使用一组默认的JsonSerializerOptions配置来进行序列化/反序列化,配置如下:</para>
/// <para>1、不区分大小写的反序列化</para>
/// <para>2、属性名称使用 camel 大小写</para>
/// <para>3、最大限度减少字符转义</para>
/// <para>4、自定义日期转换器 DateTimeConverter</para>
/// </summary>
[SingletonInject]
public class JsonHelper
{
    private readonly JsonSerializerOptions _options = new();

    /// <summary>
    /// 静态实例
    /// </summary>
    public static readonly JsonHelper Instance = new();

    public JsonHelper()
    {
        //不区分大小写的反序列化
        _options.PropertyNameCaseInsensitive = true;
        //属性名称使用 camel 大小写
        _options.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
        //最大限度减少字符转义
        _options.Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping;
        //添加日期转换器
        _options.Converters.Add(new DateTimeConverter());
        //添加多态嵌套序列化
        _options.AddPolymorphism();
    }

    /// <summary>
    /// 序列化
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="obj"></param>
    /// <returns></returns>
    public string Serialize<T>(T obj)
    {
        return JsonSerializer.Serialize(obj, typeof(T), _options);
    }

    /// <summary>
    /// 反序列化
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="json"></param>
    /// <returns></returns>
    public T Deserialize<T>(string json)
    {
        return JsonSerializer.Deserialize<T>(json, _options);
后面还有 13 行代码,解锁后查看完整代码

24 小时内免费解锁 3 个项目,之后 1 积分/个。 规则说明

AI 解读

登录后可用,每次 10 积分,解读结果公开显示在下面。

还没有人解读过这个文件。