XIKEW.COM - 实用教程 - 数据处理库 JSON - 实用教程,json,net json - JSON封装是一个被遗忘问题,我已经忘了为什么还要封装一次官方的System.Text.Json库了。可能是长期的编码经验固化了对JSON处理的一些逻辑,使用官方总觉得很别扭。姑且就这么用吧,可能还有人也会喜欢呢。

数据处理库 JSON
LINKCORE NETCORE 框架 9/8/2024 8:06:51 PM 阅读:0

JSON封装是一个被遗忘问题,我已经忘了为什么还要封装一次官方的System.Text.Json库了。可能是长期的编码经验固化了对JSON处理的一些逻辑,使用官方总觉得很别扭。姑且就这么用吧,可能还有人也会喜欢呢。 关键字:json,net json

[[toc]]

基础对象 JSON.Document

JSON.Docuemtn 的构造函数参数是 object 所以符合 json 格式的字符串、字典、模型甚至是空值都可以创建实例

var document = new JSON.Docuemtn(json);

常规获取

//获取字符串
document.GetString("key");

//获取布尔值
document.GetBoolean("key");

//获取整数int
document.GetInt("key");

//获取长整形long
document.GetInt64("key");

//获取double
document.GetDouble("key");

//获取decimal
document.GetDecimal("key");

//获取datetime
document.GetDateTime("key");

特殊取值

//获取子Document
document.GetDocument("key");

//获取字典
document.GetDictionary("key");
document.ToDictionary("key");

//当前对象
document.ToDictionary();

//获取列表
document.GetList<T>("key");

//2022.03.20新增
//获取Document列表
document.GetList("key");

//2022.04.25新增
//获取Model
document.GetModel<Model.Company>("key");

可靠的读取 OrDefault

以上的方法当 key 不存在则会抛出 LCException 报错,但有时候我们又不希望阻断程序,这时我们就使用 OrDefault 后缀

//获取字符串
document.GetStringOrDefault("key", "");

//获取布尔值
document.GetBooleanOrDefault("key", true);

// ... 以此类推

当然不用 OrDefault 也可以用 if 来判断

if(document.ContainsKey("key"))
{
    // CODE...
}

辅助函数 (前端亲切)

对象转字符串 Stringify

/// <param name="jsonSerializerOptions">提供与JsonSerializer一起使用的选项</param>
/// <param name="dateFormat">时间格式化</param>
static public string Stringify(object obj, JsonSerializerOptions jsonSerializerOptions, string dateFormat = "yyyy/MM/dd HH:mm:ss")

::: tip 关于 JsonSerializerOptions 的相关信息可以 查阅链接 :::

/// <param name="camelCase">全部小写</param>
/// <param name="Ignore">控制如何忽略序列化和反序列化的属性</param>
static public string Stringify(object obj, bool camelCase = false, string dateFormat = "yyyy/MM/dd HH:mm:ss", JsonIgnoreCondition Ignore = JsonIgnoreCondition.Never)

::: tip 关于 JsonIgnoreCondition 的相关信息可以 查阅链接 :::

字符串转对象 To

将字符串转换为对象

//转换成模型实例
Model.User model = JSON.To<Model.User>(jsonString);

//转换成字典
Dictionary<string, object> dict = JSON.To<Dictionary<string, object>>(jsonString);

ToOrNew

GetOrDefault 当返回是 null 时自动返回一个 new 实例 使用 To 的情况

var model = JSON.To<Model.User>(jsonString)
if (model == null)
{
    model = new Model.User();
}

使用 ToOrNew 的情况

var model = JSON.ToOrNew<Model.User>(jsonString);

补充说明

  • 关于时间格式, 为了兼容移动端的前端格式需求,所以内置统一格式为 "yyyy/MM/dd HH:mm:ss"
  • 关于字符串的转化, Number类型也针对性做了处理
  • 如果整数或字符串类型的整数 转 浮点不会报错