2011-02-23 97 views
0

當我反序列化到對象列表的工作,但是當我反序列化到列表類型的對象時出錯。任何想法如何使其工作?c#反序列化JSON列表的對象錯誤

頁面名稱:testjson.aspx

using System; 
using System.Collections.Generic; 
using System.Web.Script.Serialization; 

namespace Web.JSON 
{ 
    public partial class testJson : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      string json = "[{\"SequenceNumber\":1,\"FirstName\":\"FN1\",\"LastName\":\"LN1\"},{\"SequenceNumber\":2,\"FirstName\":\"FN2\",\"LastName\":\"LN2\"}]"; 


      //This work 
      IList<Person> persons = new JavaScriptSerializer().Deserialize<IList<Person>>(json); 

      //This error 
      //People persons = new JavaScriptSerializer().Deserialize<People>(json); 


      Response.Write(persons.Count()); 
     } 
    } 

    class Person 
    { 
     public int SequenceNumber { get; set; } 
     public string FirstName { get; set; } 
     public string LastName { get; set; } 
    } 

    class People : List<Person> 
    { 
     public People() 
     { 

     } 
     public People(IEnumerable<Person> init) 
     { 
      AddRange(init);    
     } 
    } 

錯誤消息: 值 「System.Collections.Generic.Dictionary`2 [System.String,System.Object的]」 的類型是不是「JSON .Person「,不能用於此通用集合

回答

5

我建議做這樣的事情:

People persons = new People(new JavaScriptSerializer().Deserialize<IList<Person>>(json)); 

,並改變你的構造函數是:

public People(IEnumerable<Person> collection) : base(collection) 
    { 

    } 

您不必擔心類型之間凌亂鑄件,和它的作品只是因爲你的People類有一個基本的構造函數,它接受一個I​​Enumberable。

+0

dahrnsbrak,工作很好,非常感謝! – 2011-02-23 20:12:37

+0

高興地幫助 - 你能標記爲接受的答案? – 2011-02-24 17:03:30

+0

太棒了!我花了很多時間試圖找出如何在找到您的帖子之前反序列化我的自定義對象。非常感謝。 – csigrist 2012-05-01 15:43:18