2012-04-06 82 views
1

在我的ASP.net C#代碼中,我有一個IEnumerable容器,裏面充滿了匿名類型的對象(它基於SQL的數據鬆散地)。如何將C#中的匿名類型的IEnumerable序列化爲JavaScript對象?

假設我的代碼看起來是這樣的:

var uics = entities.getData() 
    .Select(x => new 
     { 
      id = x.id 
      name = x.name 
      age = x.age 
     }); 
return Json(uics); //Serialize JSON in ASP.net MVC 3 

這是非常簡單的。當我將這個序列化到JavaScript時,我得到一個對象數組,每個對象都有字段id,名稱和年齡。

我想要做的就是將這些數據序列化爲一個以id爲索引的JavaScript對象,每個對象的索引都有字段名稱和年齡。

我該如何做到這一點。

+0

你的意思是你想要一個數組,基本上?因此,json將如下所示:'[「id1」:{name:name1,age:age1},「id2」:{name,name2:age:age2}]'? – 2012-04-06 15:54:07

+0

JSON應該看起來像你所描述的,@Alexander – 2012-04-06 15:56:29

+0

也許這個博客文章可以有任何幫助: http://www.west-wind.com/weblog/posts/2012/Mar/09/Using- an-alternate-JSON-Serializer-in-ASPNET-Web-API – jbl 2012-04-06 16:11:03

回答

4

您可以創建一個IDictionary,並用它作爲行動的結果:

var uics = entities.getData() 
    .ToDictionary(x => x.id, x => new { x.name, x.age }); 

return Json(uics); //Serialize JSON in ASP.net MVC 3 

無需顯式地指定爲這裏使用的匿名類型的屬性名稱,因爲編譯器默認的到用於提供值的屬性名稱(在這兩種情況下都是相同的)。

+0

+1:這是我正在尋找的答案。我想補充一點,當我實現這個答案時發現,如果你的字典鍵是一個強類型的GUID,你必須先將它轉換爲一個字符串。 – 2012-04-06 16:11:06

相關問題