来自:http://kb.cnblogs.com/page/94471/
为了便于下面的演示,下面提供一个类的代码:
[DataContract] publicclass User { ///<summary> /// 编号 ///</summary> [DataMember] publicint UserId { get; set; } ///<summary> /// 用户名 ///</summary> [DataMember] publicstring UserName { get; set; } ///<summary> /// 创建时间 ///</summary> [DataMember] [JsonConverter(typeof(IsoDateTimeConverter))] public DateTime CreateDate { get; set; } ///<summary> /// 生日 ///</summary> [DataMember] [JsonConverter(typeof(JavaScriptDateTimeConverter))] public DateTime Birthday { get; set; } ///<summary> /// 相关URL ///</summary> [DataMember] public List<string> Urls { get; set; } ///<summary> /// 薪水 ///</summary> //[ScriptIgnore]//使用JavaScriptSerializer序列化时不序列化此字段 //[IgnoreDataMember]//使用DataContractJsonSerializer序列化时不序列化此字段 //[JsonIgnore]//使用JsonConvert序列化时不序列化此字段 publicint Salary { get; set; } ///<summary> /// 权利级别 ///</summary> [DataMember] public Priority Priority { get; set; } public User() { Urls =new List<string>(); } } ///<summary> /// 权利级别 ///</summary> publicenum Priority:byte { Lowest=0x1, BelowNormal=0x2, Normal=0x4, AboveNormal=0x8, Highest=0x16 }
使用Newtonsoft.Json.JsonConvert类
Newtonsoft.Json.JsonConvert类是非微软提供的一个JSON序列化和反序列的开源免费的类库(下载网址是:http://www.codeplex.com/json/),它提供了更灵活的序列化和反序列化控制,并且如果你的开发环境使用的是.NET Framework3.5及以后版本的话,你就可以使用Linq to JSON,这样一来面对一大段的数据不必一一解析,你可以使用Linq to JSON解析出你关心的那部分即可,非常方便。
下面是使用Newtonsoft.Json.JsonConvert类的例子:
publicstaticvoid JsonConvertDemo() { User user =new User { UserId =1, UserName ="李刚", CreateDate = DateTime.Now.AddYears(-30), Birthday = DateTime.Now.AddYears(-50), Priority = Priority.BelowNormal, Salary =5000 }; //JsonConvert类在Newtonsoft.Json.Net35.dll中,注意到http://www.codeplex.com/json/下载这个dll并添加这个引用 //JSON序列化 string result = JsonConvert.SerializeObject(user); Console.WriteLine("使用JsonConvert序列化后的结果:{0},长度:{1}", result, result.Length); //JSON反序列化 user = JsonConvert.DeserializeObject<User>(result); Console.WriteLine("使用JsonConvert反序列化后的结果:UserId:{0},UserName: {1},CreateDate:{2},Priority:{3}", user.UserId, user.UserName, user.CreateDate, user.Priority); } publicstaticvoid JsonConvertLinqDemo() { User user =new User { UserId =1, UserName ="周公", CreateDate = DateTime.Now.AddYears(-8), Birthday = DateTime.Now.AddYears(-32), Priority = Priority.Lowest, Salary =500, Urls =new List<string> { "http://zhoufoxcn.blog.51cto.com", "http://blog.csdn.net/zhoufoxcn" } }; //JsonConvert类在Newtonsoft.Json.Net35.dll中,注意到http://www.codeplex.com/json/下载这个dll并添加这个引用 //JSON序列化 string result = JsonConvert.SerializeObject(user); Console.WriteLine("使用JsonConvert序列化后的结果:{0},长度:{1}", result, result.Length); //使用Linq to JSON JObject jobject = JObject.Parse(result); JToken token = jobject["Urls"]; List<string> urlList =new List<string>(); foreach (JToken t in token) { urlList.Add(t.ToString()); } Console.Write("使用Linq to JSON反序列化后的结果:["); for (int i =0; i < urlList.Count -1;i++ ) { Console.Write(urlList[i] +","); } Console.WriteLine(urlList[urlList.Count -1] +"]"); }
- 使用JsonConvert序列化后的结果:{"UserId":1,"UserName":"李刚","CreateDate":"1981-03-16T00:20:12.1875+08:00","Birthday":new Date(-277630787812),"Urls":[],"Priority":2},长度:132
- 使用JsonConvert反序列化后的结果:UserId:1,UserName:李刚,CreateDate:1981-3-16 0:20:12,Priority:BelowNormal
- 使用JsonConvert序列化后的结果:{"UserId":1,"UserName":"周公","CreateDate":"2003-03-16T00:20:12.40625+08:00","Birthday":new Date(290362812406),"Urls":["http://zhoufoxcn.blog.51cto.com","http://blog.csdn.net/zhoufoxcn"],"Priority":1},长度:198
- 使用Linq to JSON反序列化后的结果:["http://zhoufoxcn.blog.51cto.com","http://blog.csdn.net/zhoufoxcn"]
json文件
{
"Location":"香格里拉",
"ActivityDatetime":"2013-11-20 18:00:00",
}
StreamReader sr = new StreamReader(jsonFileName, Encoding.Default); string str1 = sr.ReadToEnd(); //反序列化测试对象 JsonHelper jsonHelper = new JsonHelper(); jsonHelper =JsonConvert.DeserializeObject<JsonHelper>(str1);