Как я могу получить конкретные значения из JObject в C#
Мне нужно получить конкретные значения из ответа API. Мой ответ выглядит как один ниже. Как я могу получить доступ к значению [productCodeScheme] каждого пакета?
dynamic api = JObject.Parse(response.Content);
// api contains
{
"operationCode": "12200000",
"packs": [
{
"pack": {
"productCodeScheme": "ppn",
"productCode": "15000436574634",
"serialNumber": "0000000001",
"batchId": "00001",
"expiryDate": "201201"
},
"result": {
"operationCode": "61020008",
"warning": "The product code is invalid."
}
},
{
"pack": {
"productCodeScheme": "gs1",
"productCode": "15000436574634",
"serialNumber": "0000000002",
"batchId": "00001",
"expiryDate": "201201"
},
"result": {
"operationCode": "11310300",
"information": "The pack has been marked as stolen.",
"state": "Stolen"
}
}
]
}
1 ответ
Решение
Если вы хотите, чтобы ваш объект оставался динамичным, вы можете просто сделать
dynamic result = JsonConvert.DeserializeObject<dynamic>(response.Content);
После этого вы можете получить доступ к объектам внутри, как показано ниже:
foreach(dynamic item in result.packs)
{
string productCodeScheme = item.pack.productCodeScheme.ToString();
}
Однако я настоятельно рекомендую вам десериализовать ваши ответы JSON в определенные объекты вместо того, чтобы использовать dynamic
, dynamics
и небезопасны и неэффективны. Вы можете сделать что-то вроде примера ниже,
public class PackDetails
{
public string productCodeScheme { get; set; }
public string productCode { get; set; }
public string serialNumber { get; set; }
public string batchId { get; set; }
public string expiryDate { get; set; }
}
public class Result
{
public string operationCode { get; set; }
public string warning { get; set; }
public string information { get; set; }
public string state { get; set; }
}
public class Pack
{
public PackDetails pack { get; set; }
public Result result { get; set; }
}
public class ResponseObject
{
public string operationCode { get; set; }
public List<Pack> packs { get; set; }
}
тогда вы можете десериализовать ResponseObject
как ниже и использовать его
var responseObject = JsonConvert.DeserializeObject<ResponseObject>();
foreach(PackDetails item in responseObject.packs)
{
string productCodeScheme = item.pack.productCodeScheme;
}