C# 如何将C中匿名类型的IEnumerable序列化为JavaScript对象?

C# 如何将C中匿名类型的IEnumerable序列化为JavaScript对象?,c#,javascript,asp.net,serialization,C#,Javascript,Asp.net,Serialization,在我的ASP.net C代码中,我有一个IEnumerable容器,其中填充了匿名类型的对象,该对象松散地基于SQL中的数据 假设我的代码如下所示: var uics = entities.getData() .Select(x => new { id = x.id name = x.name age = x.age }); return Json(uics); //Serial

在我的ASP.net C代码中,我有一个IEnumerable容器,其中填充了匿名类型的对象,该对象松散地基于SQL中的数据

假设我的代码如下所示:

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、name和age字段

我想做的是将这些数据序列化为一个JavaScript对象,id作为索引,索引引用的每个对象都有字段name和age

如何完成此操作。

您可以创建一个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
无需显式指定此处使用的匿名类型的属性名称,因为编译器将这些名称默认为用于提供相同值的属性名称。

您可以创建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

无需显式指定此处使用的匿名类型的属性名称,因为编译器将这些名称默认为用于提供在这两种情况下相同的值的属性名称。

您的意思是基本上需要数组?所以json看起来像:[id1:{name:name1,age:age1},id2:{name,name2:age:age2}]?json应该像你描述的那样,@alexander也许这篇博文有什么帮助:你的意思是你基本上想要一个数组?所以json看起来像:[id1:{name:name1,age:age1},id2:{name,name2:age:age2}]?json应该像你描述的那样,@alexander也许这篇博文可以帮上忙:+1:这就是我要寻找的答案。我想补充一点,我在实现这个答案时发现,如果您的字典键是强类型GUID,则必须首先将其转换为字符串。+1:这就是我要寻找的答案。我想补充一点,我在实现这个答案时发现,如果字典键是强类型GUID,则必须首先将其转换为字符串。