generics/ JSON JavaScriptSerializer C#

我正在使用VS2008Express在NET3.5SP1中构建一个winForms应用程序。 我试图使用System.Web.Script.Serialization库反序列化对象。

错误是:类型’jsonWinForm.Category’不支持反序列化数组。

干杯!

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

你发现错误很棒。 如果您正在寻找JSON序列化的另一个工具,您可能想尝试JSON.Net 。

我发现我的错误..应该是:

干杯

 JavaScriptSerializer serializer = new JavaScriptSerializer(); // create a generic list of categories List listOfCategories = new List(); // deserialize as a list of Categories, and put into listOfCategories listOfCategories = serializer.Deserialize>(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"; }