生成类别树结构json数据?
分类表:
ID => int,主键
CategoryName => varchar
ParentCategoryID => int,nullable
生成以下json数据格式:
[{ "id":1, "name":"Root", "Edit":"edit.png", "Delete":"delete.png", "children":[{ "id":2, "name":"Horoscope", "Edit":"edit.png", "Delete":"delete.png", "children":[{ "id":21, "name":"Daily", "Edit":"edit.png", "Delete":"delete.png", "children":[{ "id":211, "name":"Aries", "Edit":"edit.png", "Delete":"delete.png" },{ "id":212, "name":"Taurus", "Edit":"edit.png", "Delete":"delete.png" }] },{ "id":22, "name":"Weekly", "Edit":"edit.png", "Delete":"delete.png", "children":[{ "id":221, "name":"Gemini", "Edit":"edit.png", "Delete":"delete.png" },{ "id":222, "name":"Aries", "Edit":"edit.png", "Delete":"delete.png" },{ "id":223, "name":"Taurus", "Edit":"edit.png", "Delete":"delete.png" }] }] },{ "id":3, "name":"News", "Edit":"edit.png", "Delete":"delete.png", "children":[{ "id":31, "name":"Sports", "Edit":"edit.png", "Delete":"delete.png" },{ "id":32, "name":"Interantional", "Edit":"edit.png", "Delete":"delete.png" },{ "id":33, "name":"Entertaintment", "Edit":"edit.png", "Delete":"delete.png" }] }] }]
我有Jquery TreeGrid插件,需要上面的json格式。 如何从数据库的类别表生成上面的json数据并在控制器操作中返回json数据。 我有使用entity framework的模型。
我不打算混合数据和UI指令开始! 它使用冗余重复数据使JSON消息混乱。 我认为由客户决定将数据放在何处以及如何显示数据,或者您应该单独发送这些指令(例如,作为消息的第一部分)。
也就是说,完成这项工作的最简单方法是让你的类定义如下:
class Category { public int Id { get; set; } public string CategoryName { get; set; } public int? ParentCategoryID { get; set; } [ForeignKey("ParentCategoryID")] public virtual ICollection SubCategories { get; set; } }
当您使用ParentCategoryID == null
查询Categories
,启用延迟加载并序列化为JSON时,您将看到包含所有级别,因为对于每个Category
将发出查询以获取其子级。
请注意, Category
没有ParentCategory
属性,因为这可能导致JSON序列化因循环引用而失败。
对于序列化,如果您不在MVC API控制器中,则可以使用JavaScriptSerializer
。
BTW。 执行此操作的最佳方法是保留域模型transport-ignorant并使用CategoryDto
对象的结构。
我想你需要在你的域类中有一个名为“Children”的属性,如下所示,
Category { public int Id{get;set;} public string CategoryName{get;set;} public int ParentCategoryID {get;set;} public Category ParentCategory {get;set;} public virtual IList Children{get;set;} }
然后你可以使用像AutoMapper这样的映射器将这些模型映射到你的视图模型(它具有json对象所需的属性)