c# - 在c#中转换返回多种类类型的Json
问题描述
所以我已经开始为自己做一个项目,我正在使用 AlphaVantage API(https://www.alphavantage.co/documentation/)但是我遇到了一个问题,他们返回一个大致像这样结构的对象:
{[Meta Data, {{
"1. Information": "Weekly Prices (open, high, low, close) and Volumes",
"2. Symbol": "ko",
"3. Last Refreshed": "2019-12-13",
"4. Time Zone": "US/Eastern"
}}]}
{[Weekly Time Series, {{
"2019-12-13": {
"1. open": "54.3000",
"2. high": "54.5500",
"3. low": "53.6600",
"4. close": "54.4200",
"5. volume": "54644469"
},
"2019-12-13": {
"1. open": "54.3000",
"2. high": "54.5500",
"3. low": "53.6600",
"4. close": "54.4200",
"5. volume": "54644469"
}
}}]}
这将被构造为两个独立的对象,如下所示:
public class MetaData
{
public string Information { get; set; }
public string Symbol { get; set; }
public DateTime LastRefresh { get; set; }
public String TimeZone { get; set; }
}
public class Data
{
public List<ValueData> entry { get; set; }
}
public class ValueData
{
public DateTime Date { get; set; }
public decimal Open { get; set; }
public decimal High { get; set; }
public decimal Low { get; set; }
public decimal Close { get; set; }
public int Volume { get; set; }
}
我的问题是反序列化的最佳实践是什么?我试着只对一个对象类型这样做,并用调试器检查它,它包含 2 个独立的结构。
解决方案
在 C# 中,有多种方法可以将 JSON 反序列化为对象。最流行的Newtonsoft.Json
也称为.NET Core 3.0 中Json.NET
的System.Text.Json
API,您可以使用它。这是两者的示例:
json.net
var obj = JsonConvert.DeserializeObject<Type>(jsonString);
您的基础基本类型在哪里Type
(它似乎只是一个包含 and 属性的类Meta Data
)Weekly Time Series
并且jsonString
是您下载的 JSON。Alphavantage 在其属性名称中使用空格,因此您需要使用JsonPropertyAttribute
属性并指定名称
或者 .NET Core 3:
var obj = JsonSerializer.Parse<Type>(jsonString);
哪里又Type
是您的基础基类型,哪里又一次您需要使用属性来正确映射属性,但这次您需要JsonPropertyNameAttribute
但是,如果您不想自己创建和测试这些类,您可以查看Alphavantage.Net,它虽然未经测试,但可以为您节省大量时间。感谢 Christoph Lütjen在评论中链接它
推荐阅读
- python - 组合函数以产生所需的整数输出
- php - PHP - 具有 HEX 值的 var:操作错误
- xamarin.forms - 如何在标签页导航栏中添加搜索栏
- android - 应用程序终止后 Websocket 连接未关闭
- python - 合并数据框而不复制列
- javascript - 为什么在完成 MongoDB 'deleteMany' 调用后'res.send()' 不重定向?
- javascript - 将数组中 div 的位置附加到隐藏的输入类型
- reactjs - 如何更改在 React 中提交表单的状态?
- mysql - 如何使用子查询显示多个表中的列名
- cluster-computing - NiFiCoreException:无法启动流控制器