2015-05-21 34 views
0

我想將JSON反序列化爲List。我有.NET 4.0。正常的反序列化到一個對象工作正常。我是C#中的絕對初學者。無法將JSON反序列化到C#4.0中的列表中

我在各種論壇的幫助下寫了下面的代碼。當我嘗試將反序列化的JSON加載到Lad類型的List中時,它不會給出任何錯誤,但是當我檢查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(); 
     } 
    } 
} 

回答

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對象中有一個對象數組!

+0

工作!並感謝超級快速的迴應和解釋。 – cyboashu

1

我其實只是昨天這樣做,這就是我如何做到這一點(不知道是否有一個更簡單的方法,但它爲我工作)。我反序列化每個對象並將該對象添加到我的列表中。我有一個json對象列表(通用對象),所以我用foreach循環遍歷它們,將它們添加到列表中。此外,我使用JsonConvert.DeserializeObject,但我相信它應該以相同的方式工作。試試這個雖然:

List<Lad> Lads = new List<Lad>(); 

Lads.Add(new JavaScriptSerializer().Deserialize<Lad>(json));