JsonExtensions.cs 1.06 KB
using System.Text.Encodings.Web;
using System.Text.Json;

namespace Rcs.Shared.Utils
{
    /// <summary>
    /// JSON 序列化扩展方法
    /// @author zzy
    /// </summary>
    public static class JsonExtensions
    {
        private static readonly JsonSerializerOptions ChineseOptions = new()
        {
            Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping,
            PropertyNameCaseInsensitive = true
        };

        /// <summary>
        /// 将对象序列化为 JSON 字符串(保留中文字符,不转义为 Unicode)
        /// @author zzy
        /// </summary>
        public static string ToJsonWithChinese<T>(this T obj)
        {
            return JsonSerializer.Serialize(obj, ChineseOptions);
        }

        /// <summary>
        /// 将 JSON 字符串反序列化为对象
        /// @author zzy
        /// </summary>
        public static T? FromJson<T>(this string json)
        {
            if (string.IsNullOrEmpty(json)) return default;
            return JsonSerializer.Deserialize<T>(json, ChineseOptions);
        }
    }
}