c#中反序列化字符串以列出类

本文关键字:字符串 反序列化 | 更新日期: 2023-09-27 18:02:52

我的json字符串数据是

string r= "{"data":
[
{"ForecastID":54239761,"StatusForecast":"Done"},
{"ForecastID":54240102,"StatusForecast":"Done"},
{"ForecastID":54240400,"StatusForecast":"Done"},
{"ForecastID":54240411,"StatusForecast":"Done"},
{"ForecastID":54240417,"StatusForecast":"Done"}
]
}"
我的json类是
public class Datum
        {
            public string ForecastID { get; set; }
            public string StatusForecast { get; set; }
        }
        public class RootObject
        {
            public List<Datum> data { get; set; }
        }

我运行这段代码

JavaScriptSerializer serializer = new JavaScriptSerializer();
List<Datum> ListAnswers = serializer.Deserialize<List<Datum>>(r);
Console.WriteLine("'n Deserialize: 'n" + ListAnswers.Count  );

, ListAnswers的计数为0。数

,但应该是5件。

什么错了吗?如何正确反序列化json字符串?

c#中反序列化字符串以列出类

您需要对RootObject的实例进行反序列化。因为它是数据的根。你现在要做的就是把整件事反序列化成一个清单。事实并非如此。它是一个根对象,下面有一个列表:

RootObject obj = serializer.Deserialize<RootObject>(r);
foreach (var item in obj.data) {
    Console.WriteLine("'n Deserialize: 'n" + item.ForecastID);
}

看起来JSON字符串是一个对象,而不是一个数组。为了将JSON直接解析为List, JSON应该是一个数组。

因此,在上面的示例中,如果您将JSON字符串修改为
[
  {"ForecastID":54239761,"StatusForecast":"Done"},
  {"ForecastID":54240102,"StatusForecast":"Done"},
  {"ForecastID":54240400,"StatusForecast":"Done"},
  {"ForecastID":54240411,"StatusForecast":"Done"},
  {"ForecastID":54240417,"StatusForecast":"Done"}
]

它将解析为您所期望的。

另一个选择是创建第二个c#类来反映JSON的结构。下面的内容:

public class DataContainer
{
    public List<Datum> Data {get;set;}
}

这提供了包含在JSON字符串中的'data'属性,因此序列化程序将使用Datum对象列表填充data属性。你的调用代码看起来像这样:

JavaScriptSerializer serializer = new JavaScriptSerializer();
DataContainer results = serializer.Deserialize<DataContainer>(r);
Console.WriteLine("'n Deserialize: 'n" + results.Data.Count  );
相关文章: