分组成一个数组

时间:2013-06-11 18:58:43

标签: c# javascript json encoding

这似乎应该相当容易,但是,由于某种原因,我的大脑不合作。

我有一个简单的方法来调用它:

return Json.Encode(
    Models
    .GroupBy(e => e.Gender)
    .Select(g => new {
        Gender = g.Key,
        Count = g.Count()
    }).ToArray()
);

这会生成以下JSON:

[{"Gender":"Male","Count":2},{"Gender":"No Answer","Count":1}]

但是,我希望JSON对象看起来像这样:

[
    ['Male', 2],
    ['No Answer', 1]
]

我尝试过使用元组和字典无济于事。一旦得到回答,我相信我会自己踢。

2 个答案:

答案 0 :(得分:3)

这应该这样做:

return Json.Encode(
    Models
    .GroupBy(e => e.Gender)
    .Select(g => new object[] { g.Key, g.Count() })
    .ToArray()
);

你想要一个数组数组,所以只需创建数组。

答案 1 :(得分:1)

您可以使用Anonymous Types。这些提供了一种方便的方法,可以将一组只读属性封装到单个对象中,而无需先显式定义类型。

因此,只需跳过选择表达式中的GenderCount属性。

return Json.Encode(Models
                     .GroupBy(e => e.Gender)
                     .Select(g => new object[] { g.Key, g.Count()})
                     .ToArray());

请注意

  • 如果未在匿名类型中指定成员名称,则编译器会为匿名类型成员提供与用于初始化它们的属性相同的名称。
  • 您必须为使用表达式初始化的属性提供名称(在您的情况下为GenderCount