/// <summary>
/// 根据id pid生成json结构
/// </summary>
/// <param name="list">上下级关系</param>
/// <param name="parentOBJ ">父级object</param>
/// <param name="parentId ">父级id</param>
/// <returns></returns>
public static object CreateJObject(List<ZsjgsxszDto> list, JObject parentOBJ = null, string parentId = "", string parentName = "")
{
parentOBJ ??= new JObject();
//取下一级节点
List<ZsjgsxszDto> childNode;
if (string.IsNullOrWhiteSpace(parentId))
{
childNode = list.FindAll(x => x.PId.IsNullOrEmpty());
}
else
{
childNode = list.FindAll(x => x.PId == parentId);
}
if (childNode.Any())
{
//遍历下级节点
foreach (var item in childNode)
{
JObject curJK = new();
CreateJObject(list, curJK, item.Id, item.FullName);
if (string.IsNullOrWhiteSpace(parentId) && childNode.Any())
{
parentOBJ.Add(new JProperty(item.ProName, curJK));
}
else if (parentName.Contains(item.ParentProName) || parentName == "")
{
curJK.Add(new JProperty(item.ProName, item.ProChinaName));
parentOBJ.Merge(curJK);
}
else
{
parentOBJ.Add(new JProperty(item.ProName, curJK));
}
}
}
return parentOBJ;
}
/// <summary>
/// 属性设置关系
/// </summary>
public class ZsjgsxszDto
{
/// <summary>
/// id
/// </summary>
public string Id { get; set; }
/// <summary>
/// 父级id
/// </summary>
public string PId { get; set; }
/// <summary>
/// 全路径
/// </summary>
public string FullName { get; set; }
/// <summary>
/// 属性名称
/// </summary>
public string ProName { get; set; }
/// <summary>
/// 中文名称
/// </summary>
public string ProChinaName { get; set; }
/// <summary>
/// 父属性名称
/// </summary>
public string ParentProName { get; set; }
}
var list = new List<ZsjgsxszDto>()
{
new ZsjgsxszDto
{
Id="1",
PId="",
FullName="",
ProChinaName="用户",
ProName="user",
ParentProName=""
},
new ZsjgsxszDto
{
Id="2",
PId="1",
FullName="user.name",
ProChinaName="名称",
ProName="name",
ParentProName="user"
},
new ZsjgsxszDto
{
Id="3",
PId="1",
FullName="user.age",
ProChinaName="年龄",
ProName="age",
ParentProName="user"
}
};
var obj= CreateJObject(list);
输出结果
{
"user": {
"name": "名称",
"age": "年龄"
}
}