Generics / JSON JavaScriptSerializer C#

Tags: json c#
Question!

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


Answers

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.



Formatted, yes. Nice... rarely.

Every time I've tried to make generated HTML readable it's turned the generating code into a complete mess. I still try to do it, but it takes a lot of effort to get it right and there are always compromises.

If I can give one piece of advice here, never try to use an XML API for HTML. It might look nice to begin with, and you'll probably think setting a single boolean to indent all your code is great, but it's a Turing tar pit. I've tried every API listed in the PHP manual and every time the project ended up drowning in wrapper functions.

I'm starting to wonder whether it's better to leave HTML unindented...

By : flussence


This video can help you solving your question :)
By: admin