来自:
为了便于下面的演示,下面提供一个类的代码:
[DataContract]publicclass User{////// 编号/// [DataMember]publicint UserId { get; set; }////// 用户名/// [DataMember]publicstring UserName { get; set; }////// 创建时间/// [DataMember][JsonConverter(typeof(IsoDateTimeConverter))]public DateTime CreateDate { get; set; }////// 生日/// [DataMember][JsonConverter(typeof(JavaScriptDateTimeConverter))]public DateTime Birthday { get; set; }////// 相关URL/// [DataMember]public ListUrls { get; set; }/// /// 薪水/// //[ScriptIgnore]//使用JavaScriptSerializer序列化时不序列化此字段//[IgnoreDataMember]//使用DataContractJsonSerializer序列化时不序列化此字段//[JsonIgnore]//使用JsonConvert序列化时不序列化此字段publicint Salary { get; set; }////// 权利级别/// [DataMember]public Priority Priority { get; set; }public User(){Urls =new List();}}/// /// 权利级别/// publicenum Priority:byte{Lowest=0x1,BelowNormal=0x2,Normal=0x4,AboveNormal=0x8,Highest=0x16}
使用Newtonsoft.Json.JsonConvert类 Newtonsoft.Json.JsonConvert类是非微软提供的一个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(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 { "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 JSONJObject jobject = JObject.Parse(result);JToken token = jobject["Urls"];List urlList =new List ();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(str1);