2008-11-20 70 views
11

我正在使用VS2008Express在NET3.5SP1中構建一個winForms應用程序。我試圖使用System.Web.Script.Serialization庫反序列化一個對象。泛型/ JSON JavaScriptSerializer C#

錯誤是:類型'jsonWinForm.Category'不支持數組的反序列化。

乾杯!

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Web; 
using System.Net; 
using System.IO; 
using System.Web.Script.Serialization; 

namespace jsonWinForm { 
    public class Category 
    { 
     public int categoryid; 
     public string name; 
     public int serverimageid; 
     public DateTime dateuploaded; 
     public bool enabled; 
    } 

    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      using (WebClient client = new WebClient()) 
      { 
       //manipulate request headers (optional) 
       client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)"); 
       string targetUri = "http://www.davemateer.com/ig/genius/category.php"; 

       //execute request and read response as string to console 
       using (StreamReader reader = new StreamReader(client.OpenRead(targetUri))) 
       { 
        string s = reader.ReadToEnd(); 
        textBox1.Text = s; 

        Category cat = new Category(); 
        JavaScriptSerializer serializer = new JavaScriptSerializer(); 

        // this fails with a 
        //Type 'jsonWinForm.Category' is not supported for deserialization of an array. 
        serializer.Deserialize<Category>(s); 
       } 
      } 
     } 
    } 
} 

回答

10

這是偉大的你找到你的錯誤。如果您正在尋找其他JSON序列化工具,您可能需要嘗試JSON.Net

12

我發現我的錯誤..應該是:

乾杯

JavaScriptSerializer serializer = new JavaScriptSerializer(); 

// create a generic list of categories 
List<Category> listOfCategories = new List<Category>(); 

// deserialize as a list of Categories, and put into listOfCategories 
listOfCategories = serializer.Deserialize<List<Category>>(s); 

//iterate through list and display in text box 
foreach (Category item in listOfCategories) 
{ 
    textBox2.Text += item.categoryid.ToString() + "\r\n"; 
    textBox2.Text += item.name.ToString() + "\r\n"; 
    textBox2.Text += item.serverimageid.ToString() + "\r\n"; 
    textBox2.Text += item.dateuploaded.ToString() + "\r\n"; 
    textBox2.Text += item.enabled.ToString() + "\r\n"; 
} 
+14

如果您要用Deserialize的返回結果替換它,則不需要將listOfCategories初始化爲新的列表()。 – bruceboughton 2009-12-19 10:15:56