我的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 );
并且有0个ListAnswers.Count
但应该是5件。
什么错了?如何正确反序列化json字符串?答案 0 :(得分:2)
您需要反序列化RootObject
的实例,因为它是数据的根。你现在要做的是将整个事物反序列化为一个列表..它不是。它是一个根对象,下面有一个列表:
RootObject obj = serializer.Deserialize<RootObject>(r);
foreach (var item in obj.data) {
Console.WriteLine("\n Deserialize: \n" + item.ForecastID);
}
答案 1 :(得分:0)
看起来你的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 );