使用 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有三种方式(不使用,动态使用,静态使用,默认是动态使用)