C# 如何正确地反序列化并从JSON获取值
我的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, "
[
{
"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);
}