如何更改asp.net mvc格式化JSON的方式?

我有这个型号

public class Person { public string Name { get; set; } public int Age { get; set; } public List Colors { get; set; } } public class Color { public int ColorId { get; set; } public string Name { get; set; } } 

和asp.net MVC的return Json(...)给了我这个:

 [{"Name":"JC","Age":24,"Colors":[{"ColorId":1,"Name":"Red"},{"ColorId":2,"Name":"Blue"}]}, {"Name":"Albert","Age":29,"Colors":[{"ColorId":2,"Name":"Blue"}]}] 

当我尝试返回一种类型: List

但我想要这样的东西(如果可能的话):

 {"People":[{"Name":"JC","Age":24,"Colors":[{"ColorId":1,"Name":"Red"},{"ColorId":2,"Name":"Blue"}]},{"Name":"Albert","Age":83,"Colors":[{"ColorId":2,"Name":"Blue"}]}]} 

我的问题(S):

  • 我怎样才能让C#(asp.net mvc)以更好的格式返回JSON :(注意:忽略数据,我的主要观点是它以“People”作为主要集合返回..我应该怎么做这个?JSON.net?)

    { “人物”:[{ “名称”: “JC”, “年龄”:24, “颜色”:[{ “ColorId”:1, “名称”: “红色”},{ “ColorId”:2,”名称“:”Blue“}]},{”Name“:”Albert“,”Age“:83,”Colors“:[{”ColorId“:2,”Name“:”Blue“}]}]}

  • 或者我如何使KNOCKOUT.JS MAPPING PLUGIN使用这种类型的JSON格式? (对于那些知道淘汰赛的人)

    [{ “名称”: “JC”, “年龄”:24, “颜色”:[{ “ColorId”:1, “名称”: “红色”},{ “ColorId”:2 “名称”:“蓝“}]},{”姓名“:”艾伯特“,”年龄“:29,”颜色“:[{”ColorId“:2,”名称“:”蓝色“}]}]


更新(额外澄清/信息):

这是我的数据,我想返回一个List

  private List _people = new List { new Person { Name = "JC", Age = 24, Colors = new List { Red, Blue, } }, new Person { Name = "Albert", Age = 29, Colors = new List { Blue } } }; 

采用与此类似的JSON格式:

 {"People":[{"Name":"JC","Age":24,"Colors":[{"ColorId":1,"Name":"Red"},{"ColorId":2,"Name":"Blue"}]}, {"Name":"Albert","Age":83,"Colors":[{"ColorId":2,"Name":"Blue"}]}]} 

我只是想知道这是否可能, 或者如果没有 ,那么我怎样才能使knockout.js映射插件适应MVC返回json的方式?

您需要一个容器,因为您不想返回一个数组,而是一个带有People变量的对象。

像这样的东西(使用动态):

 var jsonData = new { People = _people }; return Json(jsonData, JsonRequestBehavior.AllowGet); 

更新

JSON是非常简单的格式。 让我们跳过你现在不需要的一切。

  • 对象:json中的对象以{}开头和结尾。 它们中的任何内容都对应于C#中的属性。
  • 数组:返回IEnumerable将返回一个数组。 数组可以包含其他数组,对象或简单字段。

上面的代码在C#中使用动态对象,可以转换为如下所示的类:

 public class MyCustomClass { public IEnumerable People {get;set;} } 

因此,它是一个返回数组的对象,导致:

 { People: [] } 

其中{}对应MyCustomClass

你可以用这种方式返回东西:

  var jsonData = new { Name = qry.Name, Age = qry.Age, Colors = ( from c in qry select new { ColorID = c.ColorID, Name = c.Name }).ToArray() }; return Json(jsonData, JsonRequestBehavior.AllowGet); 

也许是这样:)