I'm building a winForms app in NET3.5SP1 using VS2008Express. Am trying to deserialize an object using the System.Web.Script.Serialization library.
The error is: Type 'jsonWinForm.Category' is not supported for deserialization of an array.
Cheers!
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);
}
}
}
}
}
I found my error.. should be:
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";
}
It's great you found your error. If you are looking for another tool for JSON serialization you might want to try JSON.Net.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With