【问题标题】:How can I get specific values from JObject in c# [duplicate]如何从 C# 中的 JObject 获取特定值 [重复]
【发布时间】:2019-01-29 22:04:36
【问题描述】:

我需要从 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"
            }
        }
    ]
}

【问题讨论】:

  • 去网站 json2csharp - 过去你的 json - 它会给你课程;使用 Newtonsoft json 反序列化器将 json 反序列化为这些生成的类。那么你应该发现它更容易吗?否则阅读文档? newtonsoft.com/json/help/html/…
  • string productCodeScheme = api.SelectToken(@"packs[0].pack.productCodeScheme ").Value<string>() 可能是这样的?
  • 您好,请阅读How do I ask good question部分。我们期望这里有具体问题的问题。您当前的问题听起来更像是一项任务。

标签: c# jobjectformatter


【解决方案1】:

如果你想让你的对象保持动态,你可以这样做

dynamic result = JsonConvert.DeserializeObject<dynamic>(response.Content);

之后,您可以像下面这样访问里面的对象:

foreach(dynamic item in result.packs)
{
  string productCodeScheme = item.pack.productCodeScheme.ToString();
}

但是,我强烈建议您将 JSON 响应反序列化为已定义的对象,而不是使用 dynamicdynamics 既不安全又低效。你可以做一些类似下面的例子,

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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-29
    • 1970-01-01
    • 2020-02-25
    • 2017-06-16
    • 1970-01-01
    • 1970-01-01
    • 2019-11-14
    • 2014-10-24
    相关资源
    最近更新 更多