我有一个对象:
public class SiteInfo
{
public string Title { get; set; }
public string URL { get; set; }
public string Type { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我用来创建一个列表:var sites = new List();
foreach (SPWeb site in web.GetSubwebsForCurrentUser())
{
string sitetype = getConfigurationKey(site, "siteType");
//If sites have a site type then add to list
if (sitetype != "*ERROR*" && sitetype != "*KEYNOTFOUND*")
{
SiteInfo s = new SiteInfo();
s.Title = site.Title;
s.URL = site.Url;
s.Type = sitetype;
sites.Add(s);
}
}
//sort list by type
sites.Sort((x, y) => string.Compare(x.Type, y.Type));
// serialize and send..
JavaScriptSerializer serializer = new JavaScriptSerializer();
StringBuilder sbJsonResults = new StringBuilder();
serializer.Serialize(sites, sbJsonResults);
etc.....
Run Code Online (Sandbox Code Playgroud)
但是,我想要做的是在序列化之前按类型对网站进行分组.这可能是使用LINQ或其他方法.
Jon*_*eet 26
这听起来像你想要的东西:
// No need to sort sites first
var grouped = sites.OrderBy(x => x.Type)
.GroupBy(x => x.Type);
Run Code Online (Sandbox Code Playgroud)
然后只是序列化grouped.但是,我不太清楚IGrouping在JSON中会是什么样子......并且在每种情况下都会出现类型.您可能需要以下内容:
var grouped = sites.OrderBy(x => x.Type)
.GroupBy(x => x.Type)
.Select(g => new { Type = g.Key,
Sites = g.Select(site => new {
site.Title,
site.URL
} });
Run Code Online (Sandbox Code Playgroud)
我认为这会给你一个更好的JSON结构.
这个
var sites = new List<SiteInfo>()
{
new SiteInfo(){Title="1",Type="a",URL="http://aaaa"},
new SiteInfo(){Title="2",Type="b",URL="http://bbbb"},
new SiteInfo(){Title="3",Type="a",URL="http://aaaa"},
new SiteInfo(){Title="4",Type="b",URL="http://bbb"},
};
var json = new JavaScriptSerializer().Serialize(sites.GroupBy(s => s.Type));
Run Code Online (Sandbox Code Playgroud)
会产生
[
[{"Title":"1","URL":"http://aaaa","Type":"a"},{"Title":"3","URL":"http://aaaa","Type":"a"}],
[{"Title":"2","URL":"http://bbbb","Type":"b"},{"Title":"4","URL":"http://bbb","Type":"b"}]
]
Run Code Online (Sandbox Code Playgroud)
或者
var json = new JavaScriptSerializer().Serialize(sites.GroupBy(s => s.Type)
.ToDictionary(x=>x.Key,x=>x));
Run Code Online (Sandbox Code Playgroud)
会产生
{
"a":[{"Title":"1","URL":"http://aaaa","Type":"a"},{"Title":"3","URL":"http://aaaa","Type":"a"}],
"b":[{"Title":"2","URL":"http://bbbb","Type":"b"},{"Title":"4","URL":"http://bbb","Type":"b"}]
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22762 次 |
| 最近记录: |