2008-11-20 9 views
11

Je construis une application winForms dans NET3.5SP1 en utilisant VS2008Express. J'essaie de désérialiser un objet en utilisant la bibliothèque System.Web.Script.Serialization. L'erreur est: Le type 'jsonWinForm.Category' n'est pas pris en charge pour la désérialisation d'un tableau.Generics/JSON JavaScriptSerializer C#

À la votre!

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

Répondre

10

Il est génial que vous avez trouvé votre erreur. Si vous recherchez un autre outil pour la sérialisation JSON, vous pouvez essayer JSON.Net.

12

Je trouve mon erreur .. devrait être:

Vive

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

Vous n'avez pas besoin d'initialiser listOfCategories dans une nouvelle liste () si vous souhaitez le remplacer par le résultat de la désérialisation. – bruceboughton