1、JavaScriptSerializer
System.Web.Extensions.dll
System.Web.Script.Serialization命名空间
Serialize
Deserialize
http://www.cnblogs.com/dwfbenben/archive/2013/06/06/3122662.html
http://www.cnblogs.com/xiaolifeidao/archive/2013/01/28/2879523.html
2、Newtonsoft
http://www.newtonsoft.com/json
download 添加引用 :Newtonsoft.Json.dll
http://www.cnblogs.com/yanweidie/p/4605212.html
JsonConvert
数组序列化
using Newtonsoft.Json; using Newtonsoft.Json.Linq; private void button1_Click(object sender, EventArgs e) { string str; Dictionary<string, string> dic = new Dictionary<string, string>(); dic.Add("id", "0002"); dic.Add("name", "kitty"); //数组、对象序列化成字符串 str = JsonConvert.SerializeObject(dic); this.richTextBox1.Text = str; //{"id":"0002","name":"kitty"} //反序列化成对象、数组 var aobj= JsonConvert.DeserializeObject<Dictionary<string,string>>(str); this.Text = aobj["id"].ToString().Trim(); this.Text = aobj["name"]; }
类序列化 JsonConvert与JavaScriptSerializer结果相同。JsonConvert把对象序列化成json串,用JavaScriptSerializer反序列化也是可以的。
public class Person { public Person() { } public Person(int id, string name, int age) { this.Id = id; this.Name = name; this.Age = age; } public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } }
JavaScriptSerializer
private void button2_Click(object sender, EventArgs e) { JavaScriptSerializer jss = new JavaScriptSerializer(); Person pp=new Person(01,"kitty",28); //对象序列化为json字符串 this.richTextBox1.Text= jss.Serialize(pp); //json串反序列化为对象 Person p2 = jss.Deserialize<Person>(this.richTextBox1.Text); this.Text = p2.Id.ToString(); }
JsonConvert
private void button3_Click(object sender, EventArgs e) { Person pp = new Person(01, "kitty", 28); this.richTextBox1.Text =JsonConvert.SerializeObject(pp); Person p2 = JsonConvert.DeserializeObject<Person>(this.richTextBox1.Text); this.Text = p2.Name; }
datatable序列化为json串
方法1简单
DataTable dt = new DataTable(); dt.Columns.Add("id"); dt.Columns.Add("name"); dt.Rows.Add(1, "aaa"); dt.Rows.Add(2, "bbb"); dt.Rows.Add(3, "ccc"); dt.Rows.Add(4, "eee");
//dataTable序列化为json字符串 this.richTextBox1.Text = JsonConvert.SerializeObject(dt);
//json串反序列化为dataTable var dtnew = JsonConvert.DeserializeObject<DataTable>(richTextBox1.Text); this.Text = dtnew.Rows.Count.ToString();
[{"id":"1","name":"aaa"},{"id":"2","name":"bbb"},{"id":"3","name":"ccc"},{"id":"4","name":"eee"}]
Newtonsoft.Json.JsonConvert.SerializeObject
方法二
private void button5_Click(object sender, EventArgs e) { DataTable dt = new DataTable(); dt.Columns.Add("id"); dt.Columns.Add("name"); dt.Rows.Add(1, "aaa"); dt.Rows.Add(2, "bbb"); dt.Rows.Add(3, "ccc"); dt.Rows.Add(4, "eee"); JavaScriptSerializer jss = new JavaScriptSerializer(); jss.RegisterConverters(new JavaScriptConverter[]{new DataTableConverter()}); this.richTextBox1.Text = jss.Serialize(dt); } public class DataTableConverter : JavaScriptConverter { public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer) { DataTable dt = obj as DataTable; Dictionary<string, object> result = new Dictionary<string, object>(); List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>(); foreach (DataRow dr in dt.Rows) { Dictionary<string, object> row = new Dictionary<string, object>(); foreach (DataColumn dc in dt.Columns) { row.Add(dc.ColumnName, dr[dc.ColumnName]); } rows.Add(row); } result["Rows"] = rows; return result; } public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer) { throw new NotImplementedException(); } /// <summary> /// 获取本转换器支持的类型 /// </summary> public override IEnumerable<Type> SupportedTypes { get { return new Type[] { typeof(DataTable) }; } } }
.net 4.5
JsonReader reader = new JsonReader(new StringReader(jsonText));
error,无法创建抽象类或接口“Newtonsoft.Json.JsonWriter”的实例
like this ok:
写json
WriteStartArray、WriteStartObject,与end WriteEndObject成对出现。
StringWriter sw = new StringWriter(); JsonWriter writer = new JsonTextWriter(sw); writer.Formatting = Formatting.Indented; writer.WriteStartObject(); writer.WritePropertyName("myparams"); writer.WriteStartObject(); writer.WritePropertyName("id"); writer.WriteValue("0001"); writer.WritePropertyName("name"); writer.WriteValue("kitty"); writer.WritePropertyName("age"); writer.WriteValue(99); writer.WriteEndObject(); writer.WriteEndObject(); writer.Flush(); sw.Close(); this.richTextBox1.Text = sw.GetStringBuilder().ToString();
解析读json
Newtonsoft.Json.JsonReader reader = new JsonTextReader(new StringReader(this.richTextBox1.Text)); while (reader.Read()) { this.listBox1.Items.Add(reader.TokenType); }