如何使用C#查询特定属性的JSON数组
我需要在运行时动态获取JSON属性。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":
{
"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) { };