转换可在c#

时间:2019-12-16 12:58:54

标签: c# json json-deserialization

因此,我已经为自己开始一个项目,并且正在使用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个单独的结构。

1 个答案:

答案 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 DataWeekly Time Series的属性的类),而jsonString是您下载的JSON。 Alphavantage在其属性名称中使用空格,因此您需要使用JsonPropertyAttribute属性并指定名称

或者.NET Core 3:

var obj = JsonSerializer.Parse<Type>(jsonString);

Type再次是您的基础基本类型,再次需要使用属性来正确映射属性,但是这次您需要JsonPropertyNameAttribute

但是,如果您不想自己创建和测试类的麻烦,可以看看Alphavantage.Net,尽管未经测试,但可以节省很多时间。喊出Christoph Lütjen以将其链接到评论中