【问题标题】:Create JSON object instead of an Array using LINQ/JavaScriptSerializer使用 LINQ/JavaScriptSerializer 创建 JSON 对象而不是数组
【发布时间】:2011-06-13 23:24:38
【问题描述】:

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

我创建了一个 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,你指的是第二个吗?我手动输入了这个错误,对此深表歉意。

标签: c# linq json serialization


【解决方案1】:

只是一个想法......尝试

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”,它是公司名称的序列。

【讨论】:

  • 谢谢乔恩,尽管Error 2 Argument 3: cannot convert from 'AnonymousType#1' to 'System.Collections.Generic.IEqualityComparer<string>'
  • @Marko 我 认为 我看到了问题 - 尝试更新? (乔恩-希望你不介意我砍掉 ;p)
  • @Marc: 谢谢你 :) 将再次编辑以尝试摆脱滚动条...
  • P.S.我不确定标题是否有意义,如果您有更好的标题,请编辑掉。
猜你喜欢
  • 1970-01-01
  • 2014-10-29
  • 1970-01-01
  • 1970-01-01
  • 2020-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-28
相关资源
最近更新 更多