C# 如何正确地反序列化并从JSON获取值

C# 如何正确地反序列化并从JSON获取值,c#,arrays,json,object,json.net,C#,Arrays,Json,Object,Json.net,我的json: [ { "id": "SUPER_TOTAL", "title": "All", "ticketSales": [ { "dateStart": null, "dateFinish": null, "sum": 0, "quantity": 0, "sessions": 0, "

我的json:

[
   {
      "id": "SUPER_TOTAL",
      "title": "All",
      "ticketSales": [
         {
            "dateStart": null,
            "dateFinish": null,
            "sum": 0,
            "quantity": 0,
            "sessions": 0,
            "rupart": 0,
            "moneyPerSession": 0,
            "ticketsPerSession": 0,
            "middlePrice": 0,
            "periodId": "SUPER_TOTAL"
         },
         {
            "dateStart": null,
            "dateFinish": null,
            "sum": 15355230,
            "quantity": 88943,
            "sessions": 13171,
            "rupart": 0,
            "moneyPerSession": 1165.84,
            "ticketsPerSession": 7,
            "middlePrice": 172.64,
            "periodId": "TOTAL"
         },
         {
            "dateStart": "2020.01.22T00:00:00",
            "dateFinish": "2020.01.23T00:00:00",
            "sum": 15355230,
            "quantity": 88943,
            "sessions": 13171,
            "rupart": 65.5,
            "moneyPerSession": 1165.84,
            "ticketsPerSession": 7,
            "middlePrice": 172.64,
            "periodId": "20200122"
         }
      ]
   },
   {
      "id": "TOTAL",
      "title": "Regions",
      "ticketSales": [
         {
            "dateStart": null,
            "dateFinish": null,
            "sum": 0,
            "quantity": 0,
            "sessions": 0,
            "rupart": 0,
            "moneyPerSession": 0,
            "ticketsPerSession": 0,
            "middlePrice": 0,
            "periodId": "SUPER_TOTAL"
         },
         {
            "dateStart": null,
            "dateFinish": null,
            "sum": 199057,
            "quantity": 1361,
            "sessions": 196,
            "rupart": 0,
            "moneyPerSession": 1015.6,
            "ticketsPerSession": 7,
            "middlePrice": 146.26,
            "periodId": "TOTAL"
         },
         {
            "dateStart": "2020.01.22T00:00:00",
            "dateFinish": "2020.01.23T00:00:00",
            "sum": 199057,
            "quantity": 1361,
            "sessions": 196,
            "rupart": 58.2,
            "moneyPerSession": 1015.6,
            "ticketsPerSession": 7,
            "middlePrice": 146.26,
            "periodId": "20200122"
         }
      ]
   },
   {
      "id": "2400000100000",
      "title": "City",
      "ticketSales": [
         {
            "dateStart": null,
            "dateFinish": null,
            "sum": 0,
            "quantity": 0,
            "sessions": 0,
            "rupart": 0,
            "moneyPerSession": 0,
            "ticketsPerSession": 0,
            "middlePrice": 0,
            "periodId": "SUPER_TOTAL"
         },
         {
            "dateStart": null,
            "dateFinish": null,
            "sum": 199057,
            "quantity": 1361,
            "sessions": 196,
            "rupart": 0,
            "moneyPerSession": 1015.6,
            "ticketsPerSession": 7,
            "middlePrice": 146.26,
            "periodId": "TOTAL"
         },
         {
            "dateStart": "2020.01.22T00:00:00",
            "dateFinish": "2020.01.23T00:00:00",
            "sum": 199057,
            "quantity": 1361,
            "sessions": 196,
            "rupart": 58.2,
            "moneyPerSession": 1015.6,
            "ticketsPerSession": 7,
            "middlePrice": 146.26,
            "periodId": "20200122"
         }
      ]
   }
]
生成的类:

public class TicketSale
{
    public string dateStart { get; set; }
    public string dateFinish { get; set; }
    public int sum { get; set; }
    public int quantity { get; set; }
    public int sessions { get; set; }
    public double rupart { get; set; }
    public double moneyPerSession { get; set; }
    public int ticketsPerSession { get; set; }
    public double middlePrice { get; set; }
    public string periodId { get; set; }
}

public class RootObject
{
    public string id { get; set; }
    public string title { get; set; }
    public List<TicketSale> ticketSales { get; set; }
}
所以它将是两个x三个=六个有值的TicketSales类。我正在使用Newtonsoft.Json

我需要从每个ticketSales中获取sum、quantity和sessions的值,但只在数组中的第二个和第三个对象中获取,而不是第一个

如果需要TicketSales而不是第一个元素,可以使用Linq查询和Skip(1)语句来完成

您正在寻找的答案

    var main = JsonConvert.DeserializeObject<List<RootObject>>(json);
    var ticketSales = main.Select(x => x.ticketSales.Skip(1)).ToList();
选择Many将把所有的ticketSales放在一个列表中

此外

如果您对包含所有TicketSales的1个TicketSale项目感兴趣,则可以基于上面的TicketSales变量创建一个新对象

    TicketSale allSalesCollective = new TicketSale() 
    { 
        sum = ticketSales.Sum(x => x.sum), 
        quantity = ticketSales.Sum(x => x.quantity),
        sessions = ticketSales.Sum(x => x.sessions) 
    };

这将为您提供总计、数量和会话的TicketSale。

因此,请使用Json.Net。这是最简单的方法

下面是一个例子:

var json = "[\r\n   {\r\n      \"id\": \"SUPER_TOTAL\",\r\n      \"title\": \"All\",\r\n      \"ticketSales\": [\r\n         {\r\n            \"dateStart\": null,\r\n            \"dateFinish\": null,\r\n            \"sum\": 0,\r\n            \"quantity\": 0,\r\n            \"sessions\": 0,\r\n            \"rupart\": 0,\r\n            \"moneyPerSession\": 0,\r\n            \"ticketsPerSession\": 0,\r\n            \"middlePrice\": 0,\r\n            \"periodId\": \"SUPER_TOTAL\"\r\n         },\r\n         {\r\n            \"dateStart\": null,\r\n            \"dateFinish\": null,\r\n            \"sum\": 15355230,\r\n            \"quantity\": 88943,\r\n            \"sessions\": 13171,\r\n            \"rupart\": 0,\r\n            \"moneyPerSession\": 1165.84,\r\n            \"ticketsPerSession\": 7,\r\n            \"middlePrice\": 172.64,\r\n            \"periodId\": \"TOTAL\"\r\n         },\r\n         {\r\n            \"dateStart\": \"2020.01.22T00:00:00\",\r\n            \"dateFinish\": \"2020.01.23T00:00:00\",\r\n            \"sum\": 15355230,\r\n            \"quantity\": 88943,\r\n            \"sessions\": 13171,\r\n            \"rupart\": 65.5,\r\n            \"moneyPerSession\": 1165.84,\r\n            \"ticketsPerSession\": 7,\r\n            \"middlePrice\": 172.64,\r\n            \"periodId\": \"20200122\"\r\n         }\r\n      ]\r\n   },\r\n   {\r\n      \"id\": \"TOTAL\",\r\n      \"title\": \"Regions\",\r\n      \"ticketSales\": [\r\n         {\r\n            \"dateStart\": null,\r\n            \"dateFinish\": null,\r\n            \"sum\": 0,\r\n            \"quantity\": 0,\r\n            \"sessions\": 0,\r\n            \"rupart\": 0,\r\n            \"moneyPerSession\": 0,\r\n            \"ticketsPerSession\": 0,\r\n            \"middlePrice\": 0,\r\n            \"periodId\": \"SUPER_TOTAL\"\r\n         },\r\n         {\r\n            \"dateStart\": null,\r\n            \"dateFinish\": null,\r\n            \"sum\": 199057,\r\n            \"quantity\": 1361,\r\n            \"sessions\": 196,\r\n            \"rupart\": 0,\r\n            \"moneyPerSession\": 1015.6,\r\n            \"ticketsPerSession\": 7,\r\n            \"middlePrice\": 146.26,\r\n            \"periodId\": \"TOTAL\"\r\n         },\r\n         {\r\n            \"dateStart\": \"2020.01.22T00:00:00\",\r\n            \"dateFinish\": \"2020.01.23T00:00:00\",\r\n            \"sum\": 199057,\r\n            \"quantity\": 1361,\r\n            \"sessions\": 196,\r\n            \"rupart\": 58.2,\r\n            \"moneyPerSession\": 1015.6,\r\n            \"ticketsPerSession\": 7,\r\n            \"middlePrice\": 146.26,\r\n            \"periodId\": \"20200122\"\r\n         }\r\n      ]\r\n   },\r\n   {\r\n      \"id\": \"2400000100000\",\r\n      \"title\": \"City\",\r\n      \"ticketSales\": [\r\n         {\r\n            \"dateStart\": null,\r\n            \"dateFinish\": null,\r\n            \"sum\": 0,\r\n            \"quantity\": 0,\r\n            \"sessions\": 0,\r\n            \"rupart\": 0,\r\n            \"moneyPerSession\": 0,\r\n            \"ticketsPerSession\": 0,\r\n            \"middlePrice\": 0,\r\n            \"periodId\": \"SUPER_TOTAL\"\r\n         },\r\n         {\r\n            \"dateStart\": null,\r\n            \"dateFinish\": null,\r\n            \"sum\": 199057,\r\n            \"quantity\": 1361,\r\n            \"sessions\": 196,\r\n            \"rupart\": 0,\r\n            \"moneyPerSession\": 1015.6,\r\n            \"ticketsPerSession\": 7,\r\n            \"middlePrice\": 146.26,\r\n            \"periodId\": \"TOTAL\"\r\n         },\r\n         {\r\n            \"dateStart\": \"2020.01.22T00:00:00\",\r\n            \"dateFinish\": \"2020.01.23T00:00:00\",\r\n            \"sum\": 199057,\r\n            \"quantity\": 1361,\r\n            \"sessions\": 196,\r\n            \"rupart\": 58.2,\r\n            \"moneyPerSession\": 1015.6,\r\n            \"ticketsPerSession\": 7,\r\n            \"middlePrice\": 146.26,\r\n            \"periodId\": \"20200122\"\r\n         }\r\n      ]\r\n   }\r\n]";

RootObject[] root = JsonConvert.DeserializeObject<RootObject[]>(json);

foreach(var rootItem in root)
{
    rootItem.ticketSales.RemoveAt(0);
}
var json=“[\r\n{\r\n\'id\”:“SUPER\u TOTAL\”、\r\n\'title\:“All\”、\r\n\'ticketSales\”:[\r\n{\r\n\'dateStart\”:null、\r\n\'dateFinish\:null、\r\n\'sum\:0、\r\n\'quantity\:0、\r\n\'sessions\:0、\r\n\'rupart\:0、\r\n\”moneyPerSession\:0\r\n\“ticketspesession\:0\r\n\“middlePrice\:0\r\n\“periodId\”:“SUPER\u TOTAL\”\r\n}、\r\n{\r\n\“dateStart\”:null、\r\n\“dateFinish\:null、\r\n\“sum\”:15355230、\r\n\“quantity\”:88943、\r\n\会话\“:13171、\r\n\'rupart\':0、\r\n\'moneyPerSession\':1165.84、\r\n\'ticketpersession\'7、\r\n\'middlePrice\':172.64、\r\n\'periodId\':“总计”\r\n}、\r\n{\r\n\'dateStart\'2020.01.22T00:00:00\,\r\n\'dateFinish\:“2020.01.23T00:00:00”,\r\n“总和”:15355230,\r\n“数量”:88943,\r\n“会话”:13171,\r\n“部分”:65.5,\r\n“货币会话”:1165.84,\r\n“票务会话”:7,\r\n“中间价”:172.64,\r\n“时段ID”:“20200122”\r\n\r\n\r\n{\r\n\'id\\:\'TOTAL\'、\r\n\'title\':\'Regions\'、\r\n\'ticketSales\':[\r\n{\r\n\'dateStart\':null、\r\n\'dateFinish\':null、\r\n\'sum\':0、\r\n\'quantity\'0、\r\n\'sessions\'0、\r\n\'rupart\'0、\r\n\'rupart\'0、\r\n\'moneyPerSession:0、\r\n“票务持续时间”:0、\r\n“中间价”:0、\r\n“周期ID”:超级总计\r\n}、\r\n{\r\n“日期开始时间”:null、\r\n“日期结束时间”:null、\r\n“总和”:199057、\r\n“数量”:1361、\r\n“会话时间”:196、\r\n\“rupart\”:0、\r\n“moneyPerSession\”:1015.6、\r\n“ticketpersession\”:7、\r\n“middlePrice\”:146.26、\r\n“periodId\”:“TOTAL\”\r\n}、\r\n“dateStart\”:“2020.01.22T00:00:00\,\r\n“dateFinish\”:“2020.01.23T00:00:00\,\r\n”总和\“:199057、\r\n \“数量\”:1361、\r\n \“会话\”:196、\r\n \“rupart \”:58.2、\r\n \“货币会话\”:1015.6、\r\n \“票务会话\”:7、\r\n \“中间价\”:146.26、\r\n \“周期id\:“20200122\”\r\n}\r\n \ \r\n}、\r\n}、\r\n \“id\:\“2400000100000\”,\r\n\“title\”:“City\”,\r\n\“ticketSales\”:[\r\n{\r\n\“dateStart\”:null、\r\n\“dateFinish\”:null、\r\n\“sum\”:0、\r\n\“sessions\”:0、\r\n\“rupart\”:0、\r\n\“moneyPerSession\:0、\r\n\”票务会话\:0、\r\n \“中间价\”:0、\r\n \“周期ID\:“超级总计\”\r\n}、\r\n \“日期开始\”:null、\r\n \“日期结束\”:null、\r\n \“总和\”:199057、\r\n \“数量\”:1361、\r\n \“会话\”:196、\r\n \“部分”\“:0、\r\n \“moneyPerSession\”:1015.6、\r\n \“ticketsPerSession\”:7、\r\n \“middlePrice\”:146.26、\r\n \“periodId\”:“TOTAL\”\r\n}、\r\n \“dateStart\”:“2020.01.22T00:00:00\”,\r\n \“dateFinish\”:“2020.01.23T00:00:00\,\r\n \“总和”:199057、\r\n“数量”:1361、\r\n“会话”:196、\r\n“rupart\”:58.2、\r\n“货币会话”:1015.6、\r\n“票务会话”:7、\r\n“中间价”:146.26、\r\n“时段ID:”20200122“\r\n}\r\n\r\n}\r\n];
RootObject[]root=JsonConvert.DeserializeObject(json);
foreach(根中的var rootItem)
{
rootItem.ticketSales.RemoveAt(0);
}
“json”是带有json字符串的变量


对于删除第一个项目,可以使用RemoveAt(0)

那么你的问题是什么?你尝试过什么?你在访问你想要的数据时遇到了什么问题?看一看并包括一个显示你试图获取值的例子。在我开始回答之后,问题被改变了。首先是关于如何反序列化它。@TemaTre不是真的。这个问题自发布以来没有改变;它没有改变甚至连一个编辑都没有。@TemaTre回答也正确。谢谢你的帮助!
    TicketSale allSalesCollective = new TicketSale() 
    { 
        sum = ticketSales.Sum(x => x.sum), 
        quantity = ticketSales.Sum(x => x.quantity),
        sessions = ticketSales.Sum(x => x.sessions) 
    };
var json = "[\r\n   {\r\n      \"id\": \"SUPER_TOTAL\",\r\n      \"title\": \"All\",\r\n      \"ticketSales\": [\r\n         {\r\n            \"dateStart\": null,\r\n            \"dateFinish\": null,\r\n            \"sum\": 0,\r\n            \"quantity\": 0,\r\n            \"sessions\": 0,\r\n            \"rupart\": 0,\r\n            \"moneyPerSession\": 0,\r\n            \"ticketsPerSession\": 0,\r\n            \"middlePrice\": 0,\r\n            \"periodId\": \"SUPER_TOTAL\"\r\n         },\r\n         {\r\n            \"dateStart\": null,\r\n            \"dateFinish\": null,\r\n            \"sum\": 15355230,\r\n            \"quantity\": 88943,\r\n            \"sessions\": 13171,\r\n            \"rupart\": 0,\r\n            \"moneyPerSession\": 1165.84,\r\n            \"ticketsPerSession\": 7,\r\n            \"middlePrice\": 172.64,\r\n            \"periodId\": \"TOTAL\"\r\n         },\r\n         {\r\n            \"dateStart\": \"2020.01.22T00:00:00\",\r\n            \"dateFinish\": \"2020.01.23T00:00:00\",\r\n            \"sum\": 15355230,\r\n            \"quantity\": 88943,\r\n            \"sessions\": 13171,\r\n            \"rupart\": 65.5,\r\n            \"moneyPerSession\": 1165.84,\r\n            \"ticketsPerSession\": 7,\r\n            \"middlePrice\": 172.64,\r\n            \"periodId\": \"20200122\"\r\n         }\r\n      ]\r\n   },\r\n   {\r\n      \"id\": \"TOTAL\",\r\n      \"title\": \"Regions\",\r\n      \"ticketSales\": [\r\n         {\r\n            \"dateStart\": null,\r\n            \"dateFinish\": null,\r\n            \"sum\": 0,\r\n            \"quantity\": 0,\r\n            \"sessions\": 0,\r\n            \"rupart\": 0,\r\n            \"moneyPerSession\": 0,\r\n            \"ticketsPerSession\": 0,\r\n            \"middlePrice\": 0,\r\n            \"periodId\": \"SUPER_TOTAL\"\r\n         },\r\n         {\r\n            \"dateStart\": null,\r\n            \"dateFinish\": null,\r\n            \"sum\": 199057,\r\n            \"quantity\": 1361,\r\n            \"sessions\": 196,\r\n            \"rupart\": 0,\r\n            \"moneyPerSession\": 1015.6,\r\n            \"ticketsPerSession\": 7,\r\n            \"middlePrice\": 146.26,\r\n            \"periodId\": \"TOTAL\"\r\n         },\r\n         {\r\n            \"dateStart\": \"2020.01.22T00:00:00\",\r\n            \"dateFinish\": \"2020.01.23T00:00:00\",\r\n            \"sum\": 199057,\r\n            \"quantity\": 1361,\r\n            \"sessions\": 196,\r\n            \"rupart\": 58.2,\r\n            \"moneyPerSession\": 1015.6,\r\n            \"ticketsPerSession\": 7,\r\n            \"middlePrice\": 146.26,\r\n            \"periodId\": \"20200122\"\r\n         }\r\n      ]\r\n   },\r\n   {\r\n      \"id\": \"2400000100000\",\r\n      \"title\": \"City\",\r\n      \"ticketSales\": [\r\n         {\r\n            \"dateStart\": null,\r\n            \"dateFinish\": null,\r\n            \"sum\": 0,\r\n            \"quantity\": 0,\r\n            \"sessions\": 0,\r\n            \"rupart\": 0,\r\n            \"moneyPerSession\": 0,\r\n            \"ticketsPerSession\": 0,\r\n            \"middlePrice\": 0,\r\n            \"periodId\": \"SUPER_TOTAL\"\r\n         },\r\n         {\r\n            \"dateStart\": null,\r\n            \"dateFinish\": null,\r\n            \"sum\": 199057,\r\n            \"quantity\": 1361,\r\n            \"sessions\": 196,\r\n            \"rupart\": 0,\r\n            \"moneyPerSession\": 1015.6,\r\n            \"ticketsPerSession\": 7,\r\n            \"middlePrice\": 146.26,\r\n            \"periodId\": \"TOTAL\"\r\n         },\r\n         {\r\n            \"dateStart\": \"2020.01.22T00:00:00\",\r\n            \"dateFinish\": \"2020.01.23T00:00:00\",\r\n            \"sum\": 199057,\r\n            \"quantity\": 1361,\r\n            \"sessions\": 196,\r\n            \"rupart\": 58.2,\r\n            \"moneyPerSession\": 1015.6,\r\n            \"ticketsPerSession\": 7,\r\n            \"middlePrice\": 146.26,\r\n            \"periodId\": \"20200122\"\r\n         }\r\n      ]\r\n   }\r\n]";

RootObject[] root = JsonConvert.DeserializeObject<RootObject[]>(json);

foreach(var rootItem in root)
{
    rootItem.ticketSales.RemoveAt(0);
}