我正在尝试将JSON反序列化为List。我有.NET 4.0。正常反序列化到对象中可以正常工作。我是C#的绝对初学者。
我在各种论坛的帮助下编写了以下代码。当我尝试将反序列化的JSON加载到List for Lad类型时,它不会给出任何错误但是当我检查Lads对象时它只是空白。
using System;
using System.Net;
using System.Runtime.Serialization.Json;
using System.Web.Script.Serialization;
using System.Collections.Generic;
namespace RESTServicesJSONParserExample
{
public class MyDate
{
public int year { get; set; }
public int month { get; set; }
public int day { get; set; }
}
public class Lad
{
public string firstName { get; set; }
public string lastName { get; set; }
public MyDate dateOfBirth { get; set; }
}
class Program
{
static void Main()
{
var obj = new Lad
{
firstName = "Markoff",
lastName = "Chaney",
dateOfBirth = new MyDate
{
year = 1901,
month = 4,
day = 30
}
};
var json = new JavaScriptSerializer().Serialize(obj);
Console.WriteLine(json);
//This fails to load desereialized JSON in the List
List<Lad> Lads = new JavaScriptSerializer().Deserialize<List<Lad>>(json);
Lad Lad1 = new JavaScriptSerializer().Deserialize<Lad>(json);
Console.WriteLine(Lad1.firstName);
//Nothing returned here
foreach (Lad Lad2 in Lads)
{
Console.WriteLine(Lad2.firstName);
}
Console.ReadLine();
}
}
}
答案 0 :(得分:1)
您正在序列化单个Lad
。您不能将其反序列化为Lad
s!
您可以更改以下代码:
var obj = new List<Lad>
{
new Lad
{
firstName = "Markoff",
lastName = "Chaney",
dateOfBirth = new MyDate
{
year = 1901,
month = 4,
day = 30
}
}
};
现在Lads
将有一个Lad
,而Lad1
将崩溃(因为您无法将集合反序列化为单个元素)。
就像好奇心一样,你的“原创”json是
{"firstName":"Markoff","lastName":"Chaney","dateOfBirth":{"year":1901,"month":4,"day":30}}
介绍new List<>
它变为:
[{"firstName":"Markoff","lastName":"Chaney","dateOfBirth":{"year":1901,"month":4,"day":30}}]
查看初始和最终[]
?现在json对象中有一个对象数组!
答案 1 :(得分:1)
我实际上只是昨天必须这样做,这就是我做的方式(不确定是否有更简单的方法,但它对我有用)。我反序列化每个对象并将该对象添加到我的列表中。我有一个json对象列表(通用对象),所以我用foreach循环遍历它们,将它们添加到List中。此外,我使用JsonConvert.DeserializeObject,但我相信它应该以相同的方式工作。尽管尝试这个:
List<Lad> Lads = new List<Lad>();
Lads.Add(new JavaScriptSerializer().Deserialize<Lad>(json));