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

Posted

技术标签:

【中文标题】使用 LINQ/JavaScriptSerializer 创建 JSON 对象而不是数组【英文标题】:Create JSON object instead of an Array using LINQ/JavaScriptSerializer 【发布时间】: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,你指的是第二个吗?我手动输入了这个错误,对此深表歉意。 【参考方案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.我不确定标题是否有意义,如果您有更好的标题,请编辑掉。

以上是关于使用 LINQ/JavaScriptSerializer 创建 JSON 对象而不是数组的主要内容,如果未能解决你的问题,请参考以下文章

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份

Kettle java脚本组件的使用说明(简单使用升级使用)