社区I有一个存储过程,它将此JSON作为响应返回:
[
{
"displayorder": 2,
"oppItemID": 4,
"opportunityName": "Net 10",
"title": "New Amazing Promotion",
"description": "Amazing",
"image": "imagelink",
"opDate": "2018-08-09T22:00:00.937",
"slideOrder": 0,
"status": false,
"isCover": false
},
{
"displayorder": 1,
"oppItemID": 2,
"opportunityName": "Simple Mobile",
"title": "New promo",
"description": "Amazing",
"image": "imagelink",
"opDate": "2018-08-09T22:00:00.937",
"slideOrder": 0,
"status": false,
"isCover": false
},
{
"displayorder": 1,
"oppItemID": 3,
"opportunityName": "Simple Mobile",
"title": "New Amazing Promotion",
"description": "Amazing",
"image": "imagelink",
"opDate": "2018-08-10T22:00:00.937",
"slideOrder": 0,
"status": false,
"isCover": false
},
{
"displayorder": 8,
"oppItemID": 5,
"opportunityName": "Verizon",
"title": "New Amazing Promotion",
"description": "Amazing",
"image": "imagelink",
"opDate": "2018-08-09T22:00:00.937",
"slideOrder": 0,
"status": false,
"isCover": false
},
{
"displayorder": 8,
"oppItemID": 27,
"opportunityName": "Verizon",
"title": "New Amazing",
"description": "Amazing",
"image": "imagelink",
"opDate": "2018-08-22T22:00:00.937",
"slideOrder": 0,
"status": false,
"isCover": false
}
]
如您所见,有多个对象具有相同的"opportunityName“
我想要做的是根据特定的"opportunityName“对它们进行分组,并有一个对象列表,即:
"Varizon":{
0:{
"displayorder": 8,
"oppItemID": 5,
"title": "New Amazing Promotion",
"description": "Amazing",
"image": "imagelink",
"opDate": "2018-08-09T22:00:00.937",
"slideOrder": 0,
"status": false,
"isCover": false
},
1:{
"displayorder": 8,
"oppItemID": 27,
"title": "New Amazing",
"description": "Amazing",
"image": "imagelink",
"opDate": "2018-08-22T22:00:00.937",
"slideOrder": 0,
"status": false,
"isCover": false
}
}
其余商机名称也是如此
代码如下:
public List<OpportunitiesByNameForDisplay> GetBdmOpportunites(string rswnum)
{
List<OpportunitiesByNameForDisplay> OpportunitiesByNameForDisplay = new List<OpportunitiesByNameForDisplay>();
SqlParameter[] sqlParams;
List<object> real = new List<object>();
try
{
var rswnumber = new SqlParameter("@AccountNumber", rswnum);
sqlParams = new SqlParameter[1] {
rswnumber
};
string sql = "exec RSW_Reports_API.dbo.sp_CRMApp_GetAppointmentOpportunitiesFromZoomTesting " + rswnumber ;
OpportunitiesByNameForDisplay = db.Database.SqlQuery<OpportunitiesByNameForDisplay>(sql,sqlParams).ToList();
real = OpportunitiesByNameForDisplay.GroupBy(g => new List<Object> {
g.OpportunityName,
slide = new
{
g.Title,
g.Description,
g.Image,
g.opDate,
g.status,
g.SlideOrder,
g.displayorder
}
});
}
catch (Exception ex){}
return OpportunitiesByNameForDisplay;
}
我在g.OpportunityName上得到了无效的初始化器声明符,有没有办法让它工作或者更好呢?
发布于 2018-08-30 04:39:15
从您发布的纯json开始,使用LINQ转换数据。我认为在假设你想要json string之后,这与你的想法很接近。从你的方法中返回的是一个对象,而不是一个序列化的字符串。
棘手的部分是将值放入关键位置,这可以通过ToDictionary()来完成。
如果这对你来说不是一个完美的解决方案,我希望它能给你一些建议。
var json = "[{\"displayorder\":2,\"oppItemID\":4,\"opportunityName\":\"Net 10\",\"title\":\"New Amazing Promotion\",\"description\":\"Amazing\",\"image\":\"imagelink\",\"opDate\":\"2018-08-09T22:00:00.937\",\"slideOrder\":0,\"status\":false,\"isCover\":false},{\"displayorder\":1,\"oppItemID\":2,\"opportunityName\":\"Simple Mobile\",\"title\":\"New promo\",\"description\":\"Amazing\",\"image\":\"imagelink\",\"opDate\":\"2018-08-09T22:00:00.937\",\"slideOrder\":0,\"status\":false,\"isCover\":false},{\"displayorder\":1,\"oppItemID\":3,\"opportunityName\":\"Simple Mobile\",\"title\":\"New Amazing Promotion\",\"description\":\"Amazing\",\"image\":\"imagelink\",\"opDate\":\"2018-08-10T22:00:00.937\",\"slideOrder\":0,\"status\":false,\"isCover\":false},{\"displayorder\":8,\"oppItemID\":5,\"opportunityName\":\"Verizon\",\"title\":\"New Amazing Promotion\",\"description\":\"Amazing\",\"image\":\"imagelink\",\"opDate\":\"2018-08-09T22:00:00.937\",\"slideOrder\":0,\"status\":false,\"isCover\":false},{\"displayorder\":8,\"oppItemID\":27,\"opportunityName\":\"Verizon\",\"title\":\"New Amazing\",\"description\":\"Amazing\",\"image\":\"imagelink\",\"opDate\":\"2018-08-22T22:00:00.937\",\"slideOrder\":0,\"status\":false,\"isCover\":false}]";
var obj = JsonConvert.DeserializeObject<List<JSonClass>>(json);
var transformed = obj
.Select( (value, index) => new {
name = value.opportunityName,
obj = new JSonClass2 {
displayorder = value.displayorder,
oppItemID = value.oppItemID,
title = value.title,
description = value.description,
image = value.image,
opDate = value.opDate,
slideOrder = value.slideOrder,
status = value.status,
isCover = value.isCover
}
})
.GroupBy(u=>u.name) // groups by name
.ToDictionary( // use dictionary to move value from value position to key position
wrap =>wrap.Key,
wrap => wrap.Select( (v,i) => new { i, v.obj })
.ToDictionary(w => w.i, w => w.obj )
);
Console.WriteLine(JsonConvert.SerializeObject(transformed, Formatting.Indented));
控制台输出结果为:
{
"Net 10": {
"0": {
"displayorder": 2,
"oppItemID": 4,
"title": "New Amazing Promotion",
"description": "Amazing",
"image": "imagelink",
"opDate": "2018-08-09T22:00:00.937",
"slideOrder": 0,
"status": false,
"isCover": false
}
},
"Simple Mobile": {
"0": {
"displayorder": 1,
"oppItemID": 2,
"title": "New promo",
"description": "Amazing",
"image": "imagelink",
"opDate": "2018-08-09T22:00:00.937",
"slideOrder": 0,
"status": false,
"isCover": false
},
"1": {
"displayorder": 1,
"oppItemID": 3,
"title": "New Amazing Promotion",
"description": "Amazing",
"image": "imagelink",
"opDate": "2018-08-10T22:00:00.937",
"slideOrder": 0,
"status": false,
"isCover": false
}
},
"Verizon": {
"0": {
"displayorder": 8,
"oppItemID": 5,
"title": "New Amazing Promotion",
"description": "Amazing",
"image": "imagelink",
"opDate": "2018-08-09T22:00:00.937",
"slideOrder": 0,
"status": false,
"isCover": false
},
"1": {
"displayorder": 8,
"oppItemID": 27,
"title": "New Amazing",
"description": "Amazing",
"image": "imagelink",
"opDate": "2018-08-22T22:00:00.937",
"slideOrder": 0,
"status": false,
"isCover": false
}
}
}
https://stackoverflow.com/questions/52083141
复制相似问题