c# Json响应模型



我有一个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);

其他要点:

  1. 使用十进制代替字符串作为货币值
  2. 永远不要使用.Result,而应该使用await
  3. 考虑将类命名为CoversioRates,因为这是c#代码中更常见的最佳实践。属性名也是如此,但是您需要添加一个[JsonProperty("Coversio_Rates")]属性。

最新更新