我正在尝试学习C#中的JSON和Web请求,并遇到了以下问题:
keyvaluepair始终具有值0。
JSON(来自此API):
"rates": {
"2020-08-03": { "JPY": 124.51 },
"2020-08-25": { "JPY": 125.67 },
"2019-11-20": { "JPY": 119.96 },
"2020-04-08": { "JPY": 118.36 }
},
"start_at": "2019-10-28",
"base": "EUR",
"end_at": "2020-10-28"
}
Conversion.cs
public partial class ConversionRatesLastYear
{
[JsonProperty("rates")]
public Dictionary<string, Rate> Rates { get; set; }
[JsonProperty("start_at")]
public DateTimeOffset StartAt { get; set; }
[JsonProperty("base")]
public string Base { get; set; }
[JsonProperty("end_at")]
public DateTimeOffset EndAt { get; set; }
}
public partial class Rate
{
public double Valuta { get; set; }
}
我的方法
public void SelectedValuta(string valuta)
{
IRestClient restClient = new RestClient();
DateTime dtLastYear = DateTime.Today.AddYears(-1);
DateTime dtToday = DateTime.Today;
string lastYear = dtLastYear.ToString("yyyy-MM-dd");
string today = dtToday.ToString("yyyy-MM-dd");
Console.WriteLine(lastYear + " " + today);
IRestRequest request = new RestRequest(url + "history?start_at=" + lastYear + "&end_at=" + today + "&symbols="+valuta, DataFormat.Json);
var response = restClient.Get<List<ConversionRatesLastYear>>(request);
foreach (var kvp in response.Data[0].Rates)
{
//gives Value = EuroDollarConverterRealtime.Rate
Console.WriteLine("Key = {0}, Value = {1}", kvp.Key, kvp.Value);
//gives Value = 0
Console.WriteLine("Key = {0}, Value = {1}", kvp.Key, (double)kvp.Value.Valuta);
}
}
当我执行以下操作时,可以从JSON中看到整个内容:
Console.WriteLinke(response.Content)
所以问题不在于获取信息。我可以在另一个方法中使用 "start_at"、"base"、"end_at",但不能与 "rates" 一起使用。当我使用 "rates" 时,我只能获取日期,取决于我是否使用 kvp.Value,我会得到 EuroDollarConverterRealtime.Rate 或当我使用 kvp.Value.Valuta 时我得到0。
我的目标是获得每个日期的JPY双倍值。如果我只能使用日期和JPY的双倍值,那也行。注意:JPY只是一个例子,这可以是除欧元以外的任何货币。
如果我不能通过名称获取每个元素,很抱歉,我还在学习中。
var result = JsonConvert.DeserializeObject<Dictionary<string, Dictionary<string, double>>>(response);
时,我得到了“无法将'RestSharp.IRestResponse<System.collections.Generic.List<EuroDollarconverterRealtime.ConversionRatesLastYear>>'转换为'string'”的错误提示。 - JJulessDeserializeObject
调用 - 我建议更改您的Rates
属性的类型。 - Jon Skeet