无法在C#4.0中将JSON反序列化为List

时间:2015-05-21 13:49:14

标签: c# json

我正在尝试将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();
        }
    }
}

2 个答案:

答案 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));