使用LINQ / JavaScriptSerializer创建JSON对象而不是数组

5

大家好,希望你们在假期里度过了一个愉快的假期。

我创建了一个 WebService,使用 LINQ/JavaScriptSerializer 返回一个包含城市和城市内公司列表的 JSON 字符串。

我的代码大致如下:

var data = from c in db.Companies
           group c by c.City into cities
           select new
           {
               city = cities.Key,
               companies = from company in cities
                     select company.Name
           };

JavaScriptSerializer jss = new JavaScriptSerializer();
return jss.Serialize(data);

这将产生以下JSON字符串。
[
  {"city":"Auckland","companies":["Company1","Company2"]},
  {"city":"Wellington","companies":["Company3","Company4","Company5"]}
]

然而,我希望将城市作为关键字,以便能够轻松地通过它进行搜索。
例如:
[
  "Auckland" : {"companies":["Company1","Company2"]},
  "Wellington" : {"companies":["Company3","Company4","Company5"]}
]

有什么想法吗?


我认为那甚至都不是有效的JSON。你确定你不是想用花括号而不是方括号吗? - Mark Byers
嘿,@Mark,你是指第二个吗?我手动输入的,所以对错误表示歉意。 - Marko
1个回答

8

只是一个想法……尝试一下

var data = db.Companies
             .GroupBy(c => c.City)
             .ToDictionary(g => g.Key,
                           g => new { companies = g.Select(c => c.Name) });

这将构建一个Dictionary<string, xxx>,其中xxx是一个匿名类型,它有一个名为“companies”的属性,该属性是公司名称的序列。


谢谢Jon,但我遇到了一个异常:Error 2 Argument 3: cannot convert from 'AnonymousType#1' to 'System.Collections.Generic.IEqualityComparer<string>' - Marko
@Marko 我认为我看到了问题所在 - 试试更新一下?(Jon- 希望你不介意我这样hack; p) - Marc Gravell
@Marc:谢谢你 :) 我会再次编辑,尝试摆脱滚动条... - Jon Skeet
附注:如果您有更好的标题,请编辑。 - Marko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接