超长对象的嵌套反序列化-从Json到C#



我想将以下字符串对象(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();

这会给你一份你想要的清单。

最新更新