Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用C#查询特定属性的JSON数组_C#_.net_Json_Parsing - Fatal编程技术网

如何使用C#查询特定属性的JSON数组

如何使用C#查询特定属性的JSON数组,c#,.net,json,parsing,C#,.net,Json,Parsing,我需要在运行时动态获取JSON属性。JSON如下所示: { "timestamp": 1369828868, "base": "USD", "rates": { "AED": 3.673416, "AFN": 54.135233, "ALL": 108.828249, "AMD": 419.878748, "ANG": 1.788475, "AOA": 96.154668, "XDR": 0.66935, "XOF":

我需要在运行时动态获取JSON属性。JSON如下所示:

{
  "timestamp": 1369828868,
  "base": "USD",
  "rates": {
    "AED": 3.673416,
    "AFN": 54.135233,
    "ALL": 108.828249,
    "AMD": 419.878748,
    "ANG": 1.788475,
    "AOA": 96.154668,
    "XDR": 0.66935,
    "XOF": 507.521247,
    "XPF": 92.277412,
    "YER": 214.913206,
    "ZAR": 9.769538,
    "ZMK": 5227.108333,
    "ZMW": 5.316935,
    "ZWL": 322.322775
  }
}
我需要从上面的“汇率”数组中获取货币。我需要一些关于如何查询JSON结构的帮助。我用的是Newtonsoft

我不想避免的是用C#硬编码switch语句,所以我不想这样做:

var json = JsonConvert.DeserializeObject(jsonString) as dynamic;
switch (currencyPair.QuoteCurrencyCode)
{
    case "EUR":
        exchangeRate = json.rates.EUR;
        break;
    case "CNY":
        exchangeRate = json.rates.CNY;
        break;
    case "NZD":
        exchangeRate = json.rates.NZD;
        break;
    case "USD":
        exchangeRate = json.rates.USD;
        break;
    case "GBP":
        exchangeRate = json.rates.GBP;
        break;
    case "HKD":
        exchangeRate = json.rates.HKD;
        break;
    case "JPY":
        exchangeRate = json.rates.JPY;
        break;
    case "CAD":
        exchangeRate = json.rates.CAD;
        break;
    default:
        throw new Exception("Unsupported to currency: " + currencyPair.QuoteCurrencyCode);
}

您可以使用创建字典

var jObj=JObject.Parse(json); var rates=jObj[“rates”].Children().Cast() .ToDictionary(p=>p.Name,p=>(双)p.Value); //用一个语句代替switch var exchangeRate=汇率[currencyPair.QuoteCurrencyCode]; 您可以使用来执行此操作:示例:

            string json = @"{
  ""timestamp"": 1369828868,
  ""base"": ""USD"",
  ""rates"": {
    ""AED"": 3.673416,
    ""AFN"": 54.135233,
    ""ALL"": 108.828249,
    ""AMD"": 419.878748,
    ""ANG"": 1.788475,
    ""AOA"": 96.154668,
    ""XDR"": 0.66935,
    ""XOF"": 507.521247,
    ""XPF"": 92.277412,
    ""YER"": 214.913206,
    ""ZAR"": 9.769538,
    ""ZMK"": 5227.108333,
    ""ZMW"": 5.316935,
    ""ZWL"": 322.322775
  }
}";
            dynamic data = Newtonsoft.Json.JsonConvert.DeserializeObject(json);

            if (data.@base == "USD")
            {

            }
// Get the rates
foreach (var rate in data.rates) { };

我不得不用JArray替换JObject。我试图使用这个解决方案,但在我的场景中,我收到了一组记录,并且没有根/包装器对象。
            string json = @"{
  ""timestamp"": 1369828868,
  ""base"": ""USD"",
  ""rates"": {
    ""AED"": 3.673416,
    ""AFN"": 54.135233,
    ""ALL"": 108.828249,
    ""AMD"": 419.878748,
    ""ANG"": 1.788475,
    ""AOA"": 96.154668,
    ""XDR"": 0.66935,
    ""XOF"": 507.521247,
    ""XPF"": 92.277412,
    ""YER"": 214.913206,
    ""ZAR"": 9.769538,
    ""ZMK"": 5227.108333,
    ""ZMW"": 5.316935,
    ""ZWL"": 322.322775
  }
}";
            dynamic data = Newtonsoft.Json.JsonConvert.DeserializeObject(json);

            if (data.@base == "USD")
            {

            }
// Get the rates
foreach (var rate in data.rates) { };