2008-11-20 56 views
11

Tôi đang xây dựng một ứng dụng winForms trong NET3.5SP1 bằng cách sử dụng VS2008Express. Đang cố gắng deserialize một đối tượng bằng cách sử dụng thư viện System.Web.Script.Serialization.Generics/JSON JavaScriptSerializer C#

Lỗi này là: Loại 'jsonWinForm.Category' không được hỗ trợ để deserialization của một mảng.

Chúc mừng!

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); 
       } 
      } 
     } 
    } 
} 

Trả lời

10

Đó là tuyệt vời mà bạn tìm thấy lỗi của bạn. Nếu bạn đang tìm kiếm một công cụ khác để tuần tự hóa JSON, bạn có thể muốn thử JSON.Net.

12

Tôi tìm thấy lỗi của tôi .. nên là:

Cheers

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

Bạn không cần phải khởi tạo listOfCategories vào Danh sách mới () nếu bạn định thay thế nó bằng kết quả trả về của Deserialize. – bruceboughton

Các vấn đề liên quan