Skip to content
推广您的产品

Json 帮助类

命名空间:ZhonTai.Common.Helpers / ZhonTai.Common.Converters

基于 System.Text.Json 封装的 JSON 序列化工具类,线程安全,内置日期时间、枚举等自定义转换器。

应用场景

  • API 接口的请求/响应数据序列化与反序列化
  • 配置文件读取
  • 缓存数据存储与读取
  • 日志数据格式化

内置特性

JsonHelper 默认配置包含以下特性:

特性说明
驼峰命名PropertyNameCaseInsensitive = true
忽略注释ReadCommentHandling = Skip
允许尾随逗号AllowTrailingCommas = true
循环引用处理ReferenceHandler = IgnoreCycles
中文不转义Encoder = UnsafeRelaxedJsonEscaping
格式化输出WriteIndented = true

自定义转换器

转换器说明
DateTimeConverter日期时间转换,支持字符串和数字时间戳反序列化
NullableDateTimeConverter可空日期时间转换(DateTime?
FlexibleEnumConverter弹性枚举转换,同时支持字符串和数字序列化/反序列化

使用示例

序列化

csharp
using ZhonTai.Common.Helpers;

// 序列化对象
var user = new { Name = "张三", Age = 25 };
var json = JsonHelper.Serialize(user);
// {"name":"张三","age":25}

反序列化

csharp
using ZhonTai.Common.Helpers;

// 反序列化为强类型
var json = "{\"name\":\"张三\",\"age\":25}";
var user = JsonHelper.Deserialize<UserDto>(json);

// 反序列化为动态类型
var obj = JsonHelper.Deserialize(json, typeof(UserDto));

使用自定义选项

csharp
using ZhonTai.Common.Helpers;
using System.Text.Json;

// 使用自定义选项序列化
var options = new JsonSerializerOptions
{
    WriteIndented = false,
    PropertyNamingPolicy = null
};
var json = JsonHelper.Serialize(user, options);

配置全局选项

csharp
using ZhonTai.Common.Helpers;

// 修改全局默认配置(线程安全)
JsonHelper.ConfigureOptions(options =>
{
    options.WriteIndented = false;
});

获取当前配置副本

csharp
using ZhonTai.Common.Helpers;

// 获取当前全局配置的副本,避免影响全局
var options = JsonHelper.GetCurrentOptions();
options.WriteIndented = false;
var json = JsonHelper.Serialize(user, options);

FlexibleEnumConverter 枚举兼容

FlexibleEnumConverter 允许 JSON 中枚举字段同时使用字符串或数字格式:

csharp
// 以下两种 JSON 格式均可正确反序列化
var json1 = "{\"status\":\"Enabled\"}";    // 字符串格式
var json2 = "{\"status\":1}";               // 数字格式

var result1 = JsonHelper.Deserialize<MyDto>(json1);
var result2 = JsonHelper.Deserialize<MyDto>(json2);