
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);