70 lines
1.6 KiB
C#
70 lines
1.6 KiB
C#
using Mapster;
|
|
using SqlSugar;
|
|
|
|
namespace Tnb.Core;
|
|
|
|
/// <summary>
|
|
/// 字典对象
|
|
/// </summary>
|
|
public class DObject : Dictionary<string, object>
|
|
{
|
|
public DObject() { }
|
|
public DObject(string key, object value)
|
|
{
|
|
Add(key, value);
|
|
}
|
|
public DObject(Dictionary<string, object> dictionary) : base(dictionary)
|
|
{
|
|
}
|
|
|
|
/// <summary>
|
|
/// 添加字典
|
|
/// </summary>
|
|
/// <param name="codePath">以.号分隔的多级路径</param>
|
|
/// <param name="value"></param>
|
|
public void AddRange(Dictionary<string, object>? dicts)
|
|
{
|
|
if (dicts == null) return;
|
|
foreach (var item in dicts)
|
|
{
|
|
this[item.Key] = item.Value;
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 将平面结构转换为树形嵌套结构
|
|
/// </summary>
|
|
/// <param name="codePath">以.号分隔的多级路径</param>
|
|
/// <param name="value"></param>
|
|
public void AddToCascade(string codePath, object value)
|
|
{
|
|
var keys = codePath.Split('.');
|
|
if (keys.Length == 1)
|
|
{
|
|
Add(codePath, value);
|
|
return;
|
|
}
|
|
DObject temp = this;
|
|
for (int i = 0; i < keys.Length; i++)
|
|
{
|
|
var key = keys[i];
|
|
if (i < keys.Length - 1)
|
|
{
|
|
var obj = new DObject();
|
|
temp[key] = obj;
|
|
temp = obj;
|
|
}
|
|
else
|
|
{
|
|
temp[key] = value;
|
|
}
|
|
}
|
|
}
|
|
|
|
public static DObject? FromObject(object? data)
|
|
{
|
|
return data?.Adapt<DObject>(AdapterCfg.ExactCase);
|
|
}
|
|
}
|