【问题标题】:How to serialize IEnumerable of Anonymous Type in C# to JavaScript Object?如何将 C# 中匿名类型的 IEnumerable 序列化为 JavaScript 对象?
【发布时间】:2012-04-06 15:50:05
【问题描述】:

在我的 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。

我想做的是将这些数据序列化为一个以 id 作为索引的 JavaScript 对象,每个对象由其索引引用,具有字段名称和年龄。

我怎样才能做到这一点。

【问题讨论】:

  • 你的意思是你想要一个数组,基本上?所以 json 看起来像:[ "id1" : {name: name1, age: age1} , "id2" : {name, name2: age: age2}] ?
  • JSON 应该看起来像你描述的那样,@Alexander
  • 也许这篇博文可以提供任何帮助:west-wind.com/weblog/posts/2012/Mar/09/…

标签: c# javascript asp.net serialization


【解决方案1】:

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

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

【讨论】:

  • +1:这就是我正在寻找的答案。我想补充一点,我在实现此答案时发现,如果您的字典键是强类型 GUID,则必须首先将其转换为字符串。
猜你喜欢
  • 2012-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-24
  • 1970-01-01
  • 1970-01-01
  • 2011-10-17
  • 1970-01-01
相关资源
最近更新 更多