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
像 Get 的 OrDefault 当返回是 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类型也针对性做了处理
- 如果整数或字符串类型的整数 转 浮点不会报错