List 集合转换为符合 treetable 格式的
时间: 2024-03-05 22:50:55 浏览: 11
将 C# 的 List 集合转换为符合 treetable 格式的 JSON 数据,可以使用 Newtonsoft.Json 库中的 JObject 和 JArray 类型。
首先,你需要定义一个递归函数,将每个部门对象转换为一个包含 id、parent、level 和其他属性的 JSON 对象。该函数的参数应该包含当前部门对象、当前层级和所有部门对象的 List 集合。
以下是一个示例函数:
```csharp
private JObject ConvertToTreeNode(Department dept, int level, List<Department> allDepts)
{
var node = new JObject();
node["id"] = dept.Id;
node["parent"] = dept.ParentId ?? "#";
node["level"] = level;
// 将其他属性添加到 node 中
// ...
// 递归处理子部门
var children = allDepts
.Where(d => d.ParentId == dept.Id)
.Select(d => ConvertToTreeNode(d, level + 1, allDepts))
.ToList();
if (children.Count > 0)
{
node["children"] = new JArray(children);
}
return node;
}
```
该函数将一个部门对象转换为一个包含 id、parent、level 和 children 属性的 JSON 对象。其中,children 属性表示该部门的子部门列表。
接下来,你可以将所有部门对象转换为一个包含所有节点的 JArray 对象。你可以使用 LINQ 查询来获取根部门列表,然后递归处理每个根部门即可。
以下是一个示例代码:
```csharp
var allDepts = GetDepartments(); // 获取所有部门列表
var rootNodeIds = allDepts
.Where(d => d.ParentId == null)
.Select(d => d.Id)
.ToList();
var nodes = rootNodeIds
.Select(id => ConvertToTreeNode(allDepts.First(d => d.Id == id), 0, allDepts))
.ToList();
var result = new JArray(nodes);
```
该代码将所有部门对象转换为一个包含所有节点的 JArray 对象。你可以将该对象序列化为 JSON 字符串并返回给前端。
注意,以上代码仅供参考,实际实现时可能需要根据具体情况进行修改。