2011-12-30 60 views
0

我有这个模式如何更改asp.net mvc格式化JSON的方式?

public class Person 
{ 
    public string Name { get; set; } 
    public int Age { get; set; } 
    public List<Color> 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<Person>

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

{"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与像一个更好的格式(注:忽略的数据,我要点是以“人物”为主要收藏品回归。我该怎么做? JSON.net)

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

  • OR我怎样才能使KNOCKOUT.JS MAPPING PLUGIN这种类型的JSON格式的工作? (对于那些知道淘汰赛的人)

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


UPDATE(额外澄清/信息):

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

private List<Person> _people = new List<Person> 
             { 
              new Person 
               { 
                Name = "JC", 
                Age = 24, 
                Colors = new List<Color> 
                   { 
                    Red, 
                    Blue, 
                   } 
               }, 
              new Person 
               { 
                Name = "Albert", 
                Age = 29, 
                Colors = new List<Color> 
                   { 
                    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?

回答

3

你需要一个容器,因为你不希望返回数组,但与对象People变量。

这样的事情(使用动态):

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

更新

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

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

上面的代码使用C#中的动态对象,并且可以被转换成类看起来像这样:

public class MyCustomClass 
{ 
    public IEnumerable<Person> People {get;set;} 
} 

因此它是一个对象返回造成的数组:

{ People: [] } 

其中{}对应于MyCustomClass

+0

哇。我花了几个小时试图解决这个问题..通过一个聪明人的一小段代码解决。非常感谢。记住,如果你能告诉我更多关于你在那里做了什么的信息/解释?也许是一些资源,关键字的链接,或者你可以告诉我?我相当新的C#和JSON .. – 2011-12-30 13:32:29

+0

http://www.asp.net/mvc/tutorials是不错的。那里有一些JSON和其他奇特的东西。 – 2011-12-30 14:10:31

+0

@JanCarloViray:做了一个小小的更新 – jgauffin 2011-12-30 15:16:25

1

可以返回的东西,例如,像这样:

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); 

也许类似的东西:)

+0

请记住,如果你可以把它翻译成我的模型?我有点困惑,它会如何改变我的JSON格式。谢谢 – 2011-12-30 13:00:15

+0

做了一些蒙住眼睛的编码,你可能需要改变它以使其按预期工作:)并且ofc获取数据并将其放入“var qry = ..” – 2011-12-30 13:05:36

+0

我只是c#和json的初学者,但是我不认为你的代码返回一个List (?)的类型...我更新了我的问题的一些示例C#数据。也许这可能会增加一些澄清。再次感谢你的帮助。 – 2011-12-30 13:19:21