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字符串?
您需要对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 );