Json(2)-DataContractJsonSerializer

public static void DataContractSerializeDemo()
        {
            User user = new User { UserID = 1, UserName = "单车", Salary = 1000, CreateTime = DateTime.Now.AddYears(-2), Birthday = DateTime.Now.AddYears(-2), Urls = new List<string> { "http://zhoufoxcn.blog.51cto.com", "http://blog.csdn.net/zhoufoxcn" } };
            DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(User));
            string result = string.Empty;
            using(MemoryStream mstream=new MemoryStream())
            {
                serializer.WriteObject(mstream,user);
                result = Encoding.UTF8.GetString(mstream.ToArray());
                Console.WriteLine("序列化结果为:{0},{1}",result,result.Length);
            }

            byte[] bytes = Encoding.UTF8.GetBytes(result);
            using(MemoryStream mstreamD=new MemoryStream(bytes))
            {
                User userd=serializer.ReadObject(mstreamD) as User;
                Console.WriteLine("反序列化的结果为:{0},{1},{2},{3}",userd.UserName,userd.Birthday,userd.CreateTime,userd.Salary);
            }

        }

测试结果:

------ Test started: Assembly: JsonDemo.exe ------

序列化结果为:{"Birthday":"\/Date(1322961529078+0800)\/","CreateTime":"\/Date(1322961529078+0800)\/","Urls":["http:\/\/zhoufoxcn.blog.51cto.com","http:\/\/blog.csdn.net\/zhoufoxcn"],"UserID":1,"UserName":"单车"},195
反序列化的结果为:单车,2011-12-4 9:18:49,2011-12-4 9:18:49,0

1 passed, 0 failed, 0 skipped, took 0.59 seconds (Ad hoc).

 

和上篇中使用Newtonsoft.Json相比,时间格式的序列化是不同的。

 

总结:

在.NET中有三种常用的JSON序列化的类,分别是System.Web.Script.Serialization.JavaScriptSerializer类、System.Runtime.Serialization.Json.DataContractJsonSerializer类和Newtonsoft.Json.JsonConvert类。

1.System.Web.Script.Serialization.JavaScriptSerializer类是.NET类库中自带的一种JSON序列化实现,在.NET Framework3.5及以后版本中可以使用这个类,这个类位于System.Web.Extensions.dll中,使用这个类是必须添加对这个dll的引用。

2.System.Runtime.Serialization.Json.DataContractJsonSerializer类位于System.ServiceModel.Web.dll中,使用这个类时除了需要添加对System.ServiceModel.Web.dll的引用之外,还需要添加System.Runtime.Serialization.dll的引用,注意这个类也是在.NET Framework3.5及以后版本中可以使用。

3.Newtonsoft.Json.JsonConvert类是非微软提供的一个JSON序列化和反序列的开源免费的类库(下载网址是:http://www.codeplex.com/json/),它提供了更灵活的序列化和反序列化控制,并且如果你的开发环境使用的是.NET Framework3.5及以后版本的话,你就可以使用Linq to JSON,这样一来面对一大段的数据不必一一解析,你可以使用Linq to JSON解析出你关心的那部分即可,非常方便。

 

以上两篇是参见http://zhoufoxcn.blog.51cto.com/792419/517093的文章后总结的,原文请查阅http://zhoufoxcn.blog.51cto.com/792419/517093

posted on 2013-12-04 09:26  谭一丹  阅读(365)  评论(0编辑  收藏  举报

导航