C# 读取JSON文件时,Keyvaluepair值为0

C# 读取JSON文件时,Keyvaluepair值为0,c#,json.net,restsharp,C#,Json.net,Restsharp,我试图学习c#中的JSON和webrequests,但遇到了这个问题: keyvaluepair的值始终为0 JSON(): 转换为 public partial class ConversionRatesLastYear { [JsonProperty("rates")] public Dictionary<string, Rate> Rates { get; set; } [JsonProperty("start_at&qu

我试图学习c#中的JSON和webrequests,但遇到了这个问题:

keyvaluepair的值始终为0

JSON():

转换为

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; }
}
所以问题不在于获取信息。我可以在另一种方法中毫无问题地使用“start_at”、“base”、“end_at”,但不能使用“rates”。当我进行评级时,我只能获得日期,并且取决于我是否使用kvp.Value,我得到EuroDollarConverterRealtime.Rate,或者当我进行kvp.Value.Valuta时,我得到0

我的目标是在每个日期从日元获得双倍的价值。如果我只能使用日期和日元的双倍值,我可以接受。注:以日元为例,可以是除欧元以外的所有货币


很抱歉,如果我无法按名称获取每个元素,我仍在学习。

请再次查看JSON中的
速率:

“费率”:{
“2020-08-03”:{“日元”:124.51},
“2020-08-25”:{“日元”:125.67},
“2019-11-20”:{“日元”:119.96},
“2020-04-08”:{“日元”:118.36}
}
您已经声明为
字典
,这很好-但这意味着您希望看到这样的结果:

{“JPY”:124.51}
。。。要反序列化为
速率
。您有一个属性,
Valuta
,没有
JsonProperty
属性,那么您希望Json.NET如何处理Json中的“JPY”属性呢

如果您只打算使用日元作为密钥,您可以在
Rate
上指定:

公共部分课程费率
{
[JsonProperty(“日元”)]
公共双值{get;set;}
}

。。。但我认为,将
Rates
声明为
字典(并完全删除
Rate
类)更有意义。

谢谢您的帮助!我不能将JsonProperty设置为“JPY”,因为它必须是动态的。假设我想兑换美元,那么我就不要求日元了,那么JsonProperty(“日元”)是否不必要(如果我错了,请纠正我)。我试图使用你的代码,但我很难反序列化它。当我想要
var result=JsonConvert.DeserializeObject(响应)时,我得到“无法将'RestSharp.IRestResponse'转换为'string'”
@JulesHouben:您的错误消息谈到了我当然没有提到的类型,这使您很难得到帮助。但是请注意,我没有建议更改您的
反序列化对象
调用-我建议更改您的
费率
属性的类型。啊,谢谢我收到了它!非常感谢您的帮助!祝您愉快:)
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);
        }
}
Console.WriteLinke(response.Content)