因此,我已经为自己开始一个项目,并且正在使用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个单独的结构。
答案 0 :(得分:1)
在C#中,有多种将JSON反序列化为对象的方法。最受欢迎的是Newtonsoft.Json
,也称为Json.NET
,然后您就可以使用.NET Core 3.0中的System.Text.Json
API。这是两个示例:
Json.NET
var obj = JsonConvert.DeserializeObject<Type>(jsonString);
其中Type
是您的基础基本类型(似乎只是一个包含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以将其链接到评论中