gpt4 book ai didi

C# Json反序列化具有更改名称的属性

转载 作者:行者123 更新时间:2023-11-30 20:25:37 29 4
gpt4 key购买 nike

所以我想反序列化一个看起来像这样的 Json 回复:

{
"Meta Data": {
"1. Information": "Intraday (1min) prices and volumes",
"2. Symbol": "OMXS30",
"3. Last Refreshed": "2018-07-11 10:03:00",
"4. Interval": "1min",
"5. Output Size": "Compact",
"6. Time Zone": "US/Eastern"
},
"Time Series (1min)": {
"2018-07-11 10:03:00": {
"1. open": "1526.9352",
"2. high": "1526.9522",
"3. low": "1526.6548",
"4. close": "1526.7195",
"5. volume": "0"
},
"2018-07-11 10:02:00": {
"1. open": "1526.3879",
"2. high": "1527.0217",
"3. low": "1526.3879",
"4. close": "1526.9825",
"5. volume": "0"
}
}
}

我有以下类(class):

class RootObject
{
[JsonProperty("Meta Data")]
public Metadata metadata { get; set; }

[JsonProperty("Time Series (1min)")]
public TimeSeries timeSeries { get; set; }
}

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

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

[JsonProperty("3. Last Refreshed")]
public string lastRefreshed { get; set; }

[JsonProperty("4. Interval")]
public string interval { get; set; }

[JsonProperty("5. Output Size")]
public string outputSize { get; set; }

[JsonProperty("6. Time Zone")]
public string timeZone { get; set; }
}

class TimeSeries
{
[JsonProperty("timestamp")]
public List<DataValues> dataValues { get; set; }
}

class DataValues
{
[JsonProperty("1. open")]
public float open { get; set; }

[JsonProperty("2. high")]
public float high { get; set; }

[JsonProperty("3. low")]
public float low { get; set; }

[JsonProperty("4. close")]
public float close { get; set; }

[JsonProperty("5. volume")]
public float volume { get; set; }
}

元数据的反序列化有效,但似乎无法使其适用于时间戳中的数据值。我认为这是因为 Json 属性名称随每个时间戳而变化。

我想要的是每个时间戳的值都在名为 dataValues 的列表中。

我正在使用 Newtonsoft.Json。

我正在尝试获取这样的值:

string result = root.timeSeries.dataValues[0].close.ToString();

我得到的错误是:对象引用未设置为对象的实例。

最佳答案

由于对象的“键”会发生变化并且无法提前获知,因此您使用的最佳结构是 Dictionary<string, DataValues>为你的 timeSeries属性(property)并抛弃你的TimeSeries类:

class RootObject
{
[JsonProperty("Meta Data")]
public Metadata metadata { get; set; }

[JsonProperty("Time Series (1min)")]
public Dictionary<string, DataValues> timeSeries { get; set; }
}

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

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

[JsonProperty("3. Last Refreshed")]
public string lastRefreshed { get; set; }

[JsonProperty("4. Interval")]
public string interval { get; set; }

[JsonProperty("5. Output Size")]
public string outputSize { get; set; }

[JsonProperty("6. Time Zone")]
public string timeZone { get; set; }
}

class DataValues
{
[JsonProperty("1. open")]
public float open { get; set; }

[JsonProperty("2. high")]
public float high { get; set; }

[JsonProperty("3. low")]
public float low { get; set; }

[JsonProperty("4. close")]
public float close { get; set; }

[JsonProperty("5. volume")]
public float volume { get; set; }
}

我做了一个 fiddle here

关于C# Json反序列化具有更改名称的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51327025/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com