2012-04-06 85 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

相关问题