如何从 C# 中的 JObject 获取特定值
How can I get specific values from JObject in 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"
}
}
]
}
如果你想让你的对象保持动态,你可以这样做
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;
}
我需要从 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"
}
}
]
}
如果你想让你的对象保持动态,你可以这样做
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;
}