【问题标题】:Reading json with c#用c#读取json
【发布时间】:2020-06-26 13:15:24
【问题描述】:

我从证券交易所网站获取 json 格式的数据。

第一部分是这样的:

 {
    "Meta Data": {
        "1. Information": "Intraday (5min) open, high, low, close prices and volume",
        "2. Symbol": "IBM",
        "3. Last Refreshed": "2020-06-12 16:00:00",
        "4. Interval": "5min",
        "5. Output Size": "Compact",
        "6. Time Zone": "US/Eastern"
    }   
}

我想将它读入 c# 中的对象。我尝试了不同的方法来定义对象类。但是json字符串的格式让我很困惑,所以我就卡在这里了。对象类如下所示:

公共类 MetaData1

{
    [JsonProperty("Meta Data")]
    public string MetaData { get; set; }

}

我知道这不是课程的完整描述。但我想念对 json 字符串的理解。

【问题讨论】:

  • JSON 中的属性名前面真的包含数字吗?这似乎不是有效的 JSON。
  • 我强烈建议您使用来自 Newtonsoft (newtonsoft.com/json) 的 Json.NET。安装 NuGet 包并反序列化为模型。
  • 试试这个网站,它会为你生成c#类:app.quicktype.io/?l=csharp
  • 在这个 json 上生成类似乎是不可靠的,除非你总是得到这 6 个项目并且只有这 6 个项目。您必须使用属性名称注释您的类,因为 json 不遵循有效的 c# 标识符命名规则。

标签: c# json object


【解决方案1】:

在您的课程中,您已将 MetaData 定义为字符串。但是根据给定的 JSON,属性“元数据”不是一个简单的字符串。它是一个独立的对象,有自己的属性,应该在自己的类中表示。

public class ApiResponse
{
    [JsonProperty("Meta Data")]
    public MetaData MetaData { get; set; }
}

public class MetaData
{
    [JsonProperty("1. Information")]
    public string Information { get; set; }

    [JsonProperty("2. Symbol")]
    public string Symbol { get; set; }
}

假设您使用 Newtonsoft.JSON,那么您应该能够像这样反序列化 JSON:

var apiResult = JsonConvert.DeserializeObject<ApiResponse>(json);

【讨论】:

  • 好吧,我从没想过一个对象包含在另一个对象中。我已经尝试了您的解决方案并且它有效。超级。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多