2008-11-20 20 views
11

Estoy compilando una aplicación winForms en NET3.5SP1 usando VS2008Express. Estoy tratando de deserializar un objeto utilizando la biblioteca System.Web.Script.Serialization.Generics/JSON JavaScriptSerializer C#

El error es: Tipo 'jsonWinForm.Category' no se admite para la deserialización de una matriz.

¡Salud!

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

Respuesta

10

Es muy bueno que pueda encontrar su error. Si está buscando otra herramienta para la serialización JSON, puede intentar JSON.Net.

12

he encontrado mi error .. debe ser:

Saludos

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

No necesita inicializar listOfCategories en una nueva lista () si va a reemplazarlo con el resultado de la deserialización. – bruceboughton

Cuestiones relacionadas