C# 将LINQ to实体序列化为JSON
我正在尝试将linq中的场地/演出时间关系序列化为Javascript,并且很难将它们分组,基本上我有以下linq的输出C# 将LINQ to实体序列化为JSON,c#,json,linq,entity-framework,serialization,C#,Json,Linq,Entity Framework,Serialization,我正在尝试将linq中的场地/演出时间关系序列化为Javascript,并且很难将它们分组,基本上我有以下linq的输出 Venue ID | Venue Name | Party Name | Party ID 74 CityStars Cinema Late Night (3am) 2 74 CityStars Cinema Sunrise (6am) 3
Venue ID | Venue Name | Party Name | Party ID
74 CityStars Cinema Late Night (3am) 2
74 CityStars Cinema Sunrise (6am) 3
74 CityStars Cinema Morning (9am) 4
74 CityStars Cinema Noon (12pm) 5
74 CityStars Cinema After Noon (3pm) 6
我现在的问题是:
JavaScriptSerializer rSerialize = new JavaScriptSerializer();
var enVenues = from v in db.Venues
join t in db.VenueTimes on v.ID equals t.VenueID
join p in db.VenueParty on t.PartyID equals p.ID
select new
{
VenueID = v.ID,
VenueName = v.TitleEn,
PartyName = p.NameEn,
PartyID = p.ID
};
rMovie.VenuesArray = rSerialize.Serialize(enVenues);
但我想做的是将linq按场馆名称分组如下:
{[
"VenueID" : 74,
"VenueName" : "CitySars Cinema",
"VenueShowtimes" : [ {"Late Night", 2}, {"Sunrise" , 3}, etc... ]
]}
我该怎么做呢?在这里(这是一个很好的练习):
公共课堂场地
{
public int VenueId{get;set;}
公共字符串VenuName{get;set;}
公共字符串PartyName{get;set;}
公共int PartyId{get;set;}
}
班级计划
{
静态void Main(字符串[]参数)
{
列表场馆=新列表()
{
新地点(){VenueId=74,
VenuName=“CityStars电影院”,
PartyName=“深夜(凌晨3点)”,
PartyId=2},
新地点(){VenueId=74,
VenuName=“CityStars电影院”,
PartyName=“日出(早上6点)”,
PartyId=3},
新地点(){VenueId=74,
VenuName=“CityStars电影院”,
PartyName=“早上(9点)”,
PartyId=4},
新地点(){VenueId=74,
VenuName=“CityStars电影院”,
PartyName=“中午(中午12点)”,
PartyId=5},
新地点(){VenueId=74,
VenuName=“CityStars电影院”,
PartyName=“中午后(下午3点)”,
PartyId=6},
};
var venuesGrouped=场馆.GroupBy(v=>v.VenueName)。
选择(组=>
新的
{
VenueId=group.First().VenueId,
VenuName=group.Key,
VenueShowTimes=“[”+组。
选择(v=>string.Format(@“{{{0},{1}}}”,v.PartyName,v.PartyId))。
聚合((party1,party2)=>party1+“,“+party2)+”]
});
foreach(VenuesGroup中的var地点)
{
控制台写入线(
string.Format(“{{[\'VenueID\':{0},\n\'VenueName\':{1}\n,\'VenueShowTimes\':{2}]}”,
viouse.VenueId、viouse.VenueName、viouse.VenueShowTimes);
}
}
}
在这里(这是一个很好的练习):
公共课堂场地
{
public int VenueId{get;set;}
公共字符串VenuName{get;set;}
公共字符串PartyName{get;set;}
公共int PartyId{get;set;}
}
班级计划
{
静态void Main(字符串[]参数)
{
列表场馆=新列表()
{
新地点(){VenueId=74,
VenuName=“CityStars电影院”,
PartyName=“深夜(凌晨3点)”,
PartyId=2},
新地点(){VenueId=74,
VenuName=“CityStars电影院”,
PartyName=“日出(早上6点)”,
PartyId=3},
新地点(){VenueId=74,
VenuName=“CityStars电影院”,
PartyName=“早上(9点)”,
PartyId=4},
新地点(){VenueId=74,
VenuName=“CityStars电影院”,
PartyName=“中午(中午12点)”,
PartyId=5},
新地点(){VenueId=74,
VenuName=“CityStars电影院”,
PartyName=“中午后(下午3点)”,
PartyId=6},
};
var venuesGrouped=场馆.GroupBy(v=>v.VenueName)。
选择(组=>
新的
{
VenueId=group.First().VenueId,
VenuName=group.Key,
VenueShowTimes=“[”+组。
选择(v=>string.Format(@“{{{0},{1}}}”,v.PartyName,v.PartyId))。
聚合((party1,party2)=>party1+“,“+party2)+”]
});
foreach(VenuesGroup中的var地点)
{
控制台写入线(
string.Format(“{{[\'VenueID\':{0},\n\'VenueName\':{1}\n,\'VenueShowTimes\':{2}]}”,
viouse.VenueId、viouse.VenueName、viouse.VenueShowTimes);
}
}
}
以Leniel的代码为基础,下面是一个使用您的JavaScriptSerializer
的版本,应该与您的select语句一起使用:
var venuesGrouped = enVenues.GroupBy(v => v.VenueName)
.Select(group =>
new
{
VenueId = group.First().VenueId,
VenueName = group.Key,
VenueShowTimes = group.Select(v => new { PartyName = v.PartyName, PartyId = v.PartyId })
});
string jsonresult = rSerialize.Serialize(venuesGrouped);
以Leniel的代码为基础,下面是一个使用
JavaScriptSerializer
的版本,应该与select语句一起使用:
var venuesGrouped = enVenues.GroupBy(v => v.VenueName)
.Select(group =>
new
{
VenueId = group.First().VenueId,
VenueName = group.Key,
VenueShowTimes = group.Select(v => new { PartyName = v.PartyName, PartyId = v.PartyId })
});
string jsonresult = rSerialize.Serialize(venuesGrouped);