Shr*_*shr 3 c# json json-deserialization
我使用这个简单的 API,https ://exchangeratesapi.io/ ,并使用这个 uri 进行测试:https ://api.exchangeratesapi.io/history ? start_at = 2018-01-01 & end_at = 2018-03-01 & symbols =SEK。我想反序列化“费率”部分。这是一个响应示例
这是代码
public class ExchangeRate
{
[JsonProperty(PropertyName = "end_at", Order = 1)]
public DateTime EndAt { get; set; }
[JsonProperty(PropertyName = "start_at", Order = 2)]
public DateTime StartAt { get; set; }
[JsonProperty(PropertyName = "rates", Order = 3)]
public Dictionary<string, Rate> Rates { get; set; }
[JsonProperty(PropertyName = "base", Order = 4)]
public string Base { get; set; }
}
public class Rate
{
[JsonProperty]
public Dictionary<string, double> Fields{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)
或者
public class Rate
{
[JsonProperty]
public string CurrencyName { get; set; }
[JsonProperty]
public double CurrencyRate { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我像这样对它进行消毒
var result = Newtonsoft.Json.JsonConvert.DeserializeObject<ExchangeRateHistory>(response.Content);
Run Code Online (Sandbox Code Playgroud)
我的问题是 Fields 为空。有人有什么建议吗?
如果您的键/值对不是固定的并且数据必须是可配置的,那么 Newtonsoft.json 有一个可以在这里使用的功能,那就是[JsonExtensionData]. 阅读更多
现在在对象序列化时写入扩展数据。读取和写入扩展数据使自动往返所有 JSON 成为可能,而无需将每个属性添加到您要反序列化的 .NET 类型。只声明您感兴趣的属性,让扩展数据完成其余的工作。
在您的情况下,rates键具有作为动态数据的价值,因此您的Rate课程将是
public class Rate
{
[JsonExtensionData]
public Dictionary<string, JToken> Fields { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后您可以将您的响应内容反序列化为
var result = Newtonsoft.Json.JsonConvert.DeserializeObject<ExchangeRate>(response.Content);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
178 次 |
| 最近记录: |