【发布时间】:2017-05-25 12:57:24
【问题描述】:
在我的 ASP.NET 应用程序中,我想将对象列表转换为树状结构(即连接其对应父节点下的每个叶节点)。我已经尝试过了,但没有得到想要的结构:
public class CVBoxController : ApiController
{
public async Task<HttpResponseMessage> GetCategories()
{
var categories = new List<CategoriesList>
{
new CategoriesList { Id=1, Name="Cat 01", ParentId=0 },
new CategoriesList { Id=2, Name="Cat 02", ParentId=0 },
new CategoriesList { Id=3, Name="Cat 03", ParentId=0 },
new CategoriesList { Id=4, Name="Cat 04", ParentId=0 },
new CategoriesList { Id=5, Name="Cat 05", ParentId=0 },
new CategoriesList { Id=6, Name="Cat 06", ParentId=1 },
new CategoriesList { Id=7, Name="Cat 07", ParentId=6 },
new CategoriesList { Id=8, Name="Cat 08", ParentId=3 },
new CategoriesList { Id=9, Name="Cat 09", ParentId=4 },
new CategoriesList { Id=10, Name="Cat 10", ParentId=9 },
new CategoriesList { Id=11, Name="Cat 11", ParentId=10 }
};
var response = CreateCategoryTree(categories);
return Request.CreateResponse(HttpStatusCode.OK, response);
}
private List<CategoryNode> CreateCategoryTree(List<CategoriesList> categories)
{
List<CategoryNode> nodes = new List<CategoryNode>();
foreach (var item in categories)
{
if (item.ParentId == 0)
nodes.Add(new CategoryNode { Id = item.Id, Name = item.Name });
else
{
CreateNode(nodes, item);
}
}
return nodes;
}
private void CreateNode(List<CategoryNode> nodes, CategoriesList parent)
{
foreach (var node in nodes)
{
if (node.Id == parent.Id)
{
node.Children.Add(new CategoryNode { Id = parent.Id, Name = parent.Name });
}
else
{
CreateNode(node.Children, parent);
}
}
}
}
public class CategoriesList
{
public int Id { get; set; }
public string Name { get; set; }
public int ParentId { get; set; }
}
public class CategoryNode
{
public int Id { get; set; }
public string Name { get; set; }
public List<CategoryNode> Children { get; set; }
public CategoryNode()
{
Children = new List<CategoryNode>();
}
}
当前响应(作为 JSON):
[{
"id": 1,
"name": "Cat 01",
"children": []
}, {
"id": 2,
"name": "Cat 02",
"children": []
}, {
"id": 3,
"name": "Cat 03",
"children": []
}, {
"id": 4,
"name": "Cat 04",
"children": []
}, {
"id": 5,
"name": "Cat 05",
"children": []
}]
如您所见,JSON 没有嵌套(未填充子级)。它应该根据上面List<CategoriesList> 中填充的内容。 ParentId=0 表示这些是上面没有父节点的根节点。
【问题讨论】:
-
“我试过了,但没有得到想要的结构”你得到了什么?你期待什么?
-
我需要 JSON 用于前端的 TreeView。
-
那么你现在有什么?你的代码会产生什么?为什么错了?
-
在问题本身而不是 cmets 中发布。不要让人猜测
-
好的 - 所以问题是没有填充孩子?如果从一开始就存在问题,那将会很有帮助。帮助我们为您提供帮助。
标签: c# data-structures tree