2011-12-30 114 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