1

実行時に 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
  }
}

上記の「Rates」配列から通貨を取得する必要があります。JSON 構造をクエリする方法を理解するのに助けが必要です。ニュートンソフトを使用しています。

私が避けたくないのは、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);
}
4

2 に答える 2

2

Json.Netを使用して辞書を作成できます

var jObj = JObject.Parse(json);
var rates = jObj["rates"].Children().Cast<JProperty>()
            .ToDictionary(p => p.Name, p => (double)p.Value);

//A single statement instead of switch
var exchangeRate = rates[currencyPair.QuoteCurrencyCode];
于 2013-05-29T12:52:04.403 に答える
0

Json.Netを使用してこれを行うことができます: 例:

            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) { };
于 2013-05-29T12:54:18.590 に答える