非常长的对象的嵌套反序列化-从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();

这将为您提供所需的列表。