C#解析JSON几种方式-整理
1 public static class JSON 2 { 3 public static T parse<T>(string jsonString) 4 { 5 using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString))) 6 { 7 return (T)new DataContractJsonSerializer(typeof(T)).ReadObject(ms); 8 } 9 } 10 public static string stringify(object jsonObject) 11 { 12 using (var ms = new MemoryStream()) 13 { 14 new DataContractJsonSerializer(jsonObject.GetType()).WriteObject(ms, jsonObject); 15 return Encoding.UTF8.GetString(ms.ToArray()); 16 } 17 } 18 }
1.4 main函数调用
1 //类初始化 2 var p1 = new Person 3 { 4 Age = 10, 5 Alive = true, 6 Name = "yylp521", 7 FavoriteFilms = new[] { "行尸走肉", "生化危机" } 8 }; 9 var p2 = new Person() { Age = 32, Name = "bjlihx", Child = p1 }; 10 //序列化 11 var jsonString = JSON.stringify(new[] { p1, p2 }); 12 Console.WriteLine(jsonString); 13 JSON.parse<List<Person>>(jsonString);// 反序列化,泛型集合 14 JSON.parse<Person[]>(jsonString);// 数组转换 15 Console.ReadKey();
输出数据:[{"Name":"yylp521","Age":10,"Alive":true,"FavoriteFilms":["行尸走肉","生化危机"],"Child":null},{"Name":"bjlihx","Age":32,"Alive":false,"FavoriteFilms":null,"Child":{"Name":"yylp521","Age":10,"Alive":true,"FavoriteFilms":["行尸走肉","生化危机"],"Child":null}}]
简要说明:1.准备数据那里要有相关特性标签
2.也可以通过JsonReaderWriterFactory来实现
2.内置方式,使用JavaScriptSerializer
2.1 使用.NET Framework 3.5之后版本(包含.Net FrameWork 3.5)中提供的System.Web.Script.Serialization命名空间下的JavaScriptSerializer类进行对象的序列化与反序列化.
2.2 需要添加命名空间:using System.Web.Script.Serialization;
2.3 测试代码
1 JavaScriptSerializer json = new JavaScriptSerializer(); 2 json.Serialize(new List<Person>() { p1, p2 });//这里参数是Object类型的
3.支持Silverlight使用,system.json
3.1 暂时未使用到Silverlight中。
4.通用开源方式,使用JSON.NET
4.1 使用开源的类库Newtonsoft.Json(下载地址http://json.codeplex.com/)。下载后加入工程就能用。
通常可以使用JObject, JsonReader, JsonWriter处理。这种方式最通用,最灵活,也可以随时修改。
4.2 详细内容
4.2.0 添加命名空间:using Newtonsoft.Json;
4.2.1 使用JsonReader读Json字符串
4.2.2 使用JsonWriter写字符串
4.2.3 使用JObject读写字符串
4.2.3.1 添加命名空间:using Newtonsoft.Json.Linq;
4.2.4 使用JsonSerializer读写对象(基于JsonWriter与JsonReader)
4.2.4.1数组型数据
4.2.4.2嵌套格式
4.2.4.3 自定义使用
1.辅助类
2.使用