我有一个HTTP调用,返回以下内容,我试图将coverio_rates转换为可返回的模型,一些值得到填充,但converio_rates始终为null。
string response = apiResponse.Content.ReadAsStringAsync().Result;
var typetoReturn = JsonConvert.DeserializeObject<Info>(response);
,但是这些值永远不等于集合。
API响应模型示例
{
"result": "success",
"documetatio": "https: //www.exchagerate-api.com/docs",
"terms_of_use": "https://www.exchagerate-api.com/terms",
"time_last_update_uix": 1631266201,
"time_last_update_utc": "Fri, 10 Sep 2021 09:30:01 +0000",
"time_ext_update_uix": 1631352601,
"time_ext_update_utc": "Sat, 11 Sep 2021 09:30:01 +0000",
"base_code": "USD",
"coversio_rates": {
"USD": 1,
"AED": 3.6725,
"AF": 81.8475,
"ALL": 102.7736,
"AMD": 492.9916,
}
}
模型Coversio_Rates
public class Coversio_Rates
{
public float USD { get; set; }
public float AED { get; set; }
public float AF { get; set; }
public float ALL { get; set; }
public float AMD { get; set; }
}
public class Info
{
public string result { get; set; }
public string documetatio { get; set; }
public string base_code { get; set; }
public Coversio_Rates Coversio_Rates { get; set; }
}
您需要一个包装器类,因为这些属性是子值。例如:
public class Root
{
public Coversio_Rates Coversio_Rates { get; set; }
// Add in the other properties if you want them too
}
现在做的事:
var typetoReturn = JsonConvert.DeserializeObject<Root>(response);
其他要点:
- 使用十进制代替字符串作为货币值
- 永远不要使用
.Result
,而应该使用await
。 - 考虑将类命名为
CoversioRates
,因为这是c#代码中更常见的最佳实践。属性名也是如此,但是您需要添加一个[JsonProperty("Coversio_Rates")]
属性。