首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >C#按键值对JSON分组

C#按键值对JSON分组
EN

Stack Overflow用户
提问于 2018-08-30 01:26:31
回答 1查看 811关注 0票数 0

社区I有一个存储过程,它将此JSON作为响应返回:

代码语言:javascript
代码运行次数:0
运行
复制
[
  {
    "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“对它们进行分组,并有一个对象列表,即:

代码语言:javascript
代码运行次数:0
运行
复制
"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
      }
}

其余商机名称也是如此

代码如下:

代码语言:javascript
代码运行次数:0
运行
复制
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上得到了无效的初始化器声明符,有没有办法让它工作或者更好呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-30 04:39:15

从您发布的纯json开始,使用LINQ转换数据。我认为在假设你想要json string之后,这与你的想法很接近。从你的方法中返回的是一个对象,而不是一个序列化的字符串。

棘手的部分是将值放入关键位置,这可以通过ToDictionary()来完成。

如果这对你来说不是一个完美的解决方案,我希望它能给你一些建议。

代码语言:javascript
代码运行次数:0
运行
复制
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));

控制台输出结果为:

代码语言:javascript
代码运行次数:0
运行
复制
{
  "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
    }
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52083141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档