问题描述
我想将以下字符串对象(JSON字符串)反序列化为C#列表。 请注意,这是JSON格式,而不是C#转义字符等。
{
"2020-01-01":
{
"price" : 100
},"2020-01-02":
{
"price" : 101
},"2020-01-03":
{
"price" : 103
},"2020-01-04":
{
"price" : 104
},...
}
所需的结果将是像这样的对象的列表:
class DataPoint
{
public string Date { get; set;}
public int Price { get; set;}
}
例如结果应该看起来像
{{"2020-01-01",100},{"2020-01-02",101},{"2020-01-03",103},{"2020-01-04",104}}
请注意,https://json2csharp.com/解决方案对于我来说是不可接受的,因为日期可能很多,并且不可能编写一个覆盖所有数据点的类,如此处建议的那样。
能否请您提出一种将原始字符串JSON对象反序列化为C#集合的List类型的方法?
解决方法
创建这样的类:
public class Price
{
public int price { get; set; }
}
然后将您的JSON反序列化为Dictionary<string,Price>
,如下所示:
var results = JsonConvert.DeserializeObject<Dictionary<string,Price>>(data);
一旦将其放入字典中,就可以像这样建立DataPoint
类的项目集合:
var items = new List<DataPoint>();
foreach (var item in results)
{
items.Add(new DataPoint {Date = item.Key,Price = item.Value.price});
}
或者如果您喜欢大的长LINQ表达式:
var items = results.Select(item => new DataPoint {Date = item.Key,Price = item.Value.price}).ToList();
这将为您提供所需的列表。