Json怎么实现序列化与反序列化这次给大家带来Json怎么实现序列化与反序列化(附代码),Json实现序列化与反序列化的注意事项有哪些,下面 就是实战案例,一起来看一下。什么是JSON?JSON(JavaScriptObjectNotation)isaligh tweightdata-interchangeformat.Itiseasyforhumanstoreadan dwriteandeasyformachinestoparseandgenerate.JSONisate xtformatthatiscompletelylanguageindependent.翻译:Json【javascr ipt对象表示方法】,它是一个轻量级的数据交换格式,我们可以很简单的来读取和写它,并且它很容易被计算机转化和生成,它是完全独立于语 言的。Json支持下面两种数据结构:键值对的集合--各种不同的编程语言,都支持这种数据结构;有序的列表类型值的集合--这其中包含数 组,集合,矢量,或者序列,等等。Json有下面几种表现形式1.对象一个没有顺序的“键/值”,一个对象以花括号“{”开始,并以花括号 "}"结束,在每一个“键”的后面,有一个冒号,并且使用逗号来分隔多个键值对。例如:1var?user={"name":"Man as","gender":"Male","birthday":"1987-8-8"}2.数组设置值的顺序,一个数组以中括号"["开 始,并以中括号"]"结束,并且所有的值使用逗号分隔例如:12var?userlist=[{"user":{"name":"Ma nas","gender":"Male","birthday":"1987-8-8"}},{"user":{"name":"Moh apatra","Male":"Female","birthday":"1987-7-7"}}]3.字符串任意数量的Unicode 字符,使用引号做标记,并使用反斜杠来分隔。例如:1var?userlist=?"{\"ID\":1,\"Name\":\"Man as\",\"Address\":\"India\"}"好了,介绍完JSON,现在说正题。序列化和反序列化有三种方式:使用Java ScriptSerializer类使用DataContractJsonSerializer类使用JSON.NET类库我们先来看看使 用DataContractJsonSerializer的情况DataContractJsonSerializer类帮助我们序列化 和反序列化Json,他在程序集System.Runtime.Serialization.dll下的System.Runtime.S erialization.Json命名空间里。首先,这里,我新建一个控制台的程序,新建一个类Student123456789101 112131415161718192021usingSystem;usingSystem.Collections.Generi c;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Task s;usingSystem.Runtime.Serialization;namespace?JsonSerializerAndD eSerializer{?[DataContract]?public?class?Student?{?[DataMember]?p ublic?intID{get;set;}?[DataMember]?public?stringName{get; set;}?[DataMember]?public?intAge{get;set;}?[DataMember]?pu blic?stringSex{get;set;}?}}注意:上面的Student实体中的契约[DataMember], [DataContract],是使用DataContractJsonSerializer序列化和反序列化必须要加的,对于其他两种方 式不必加,也可以的。我们程序的代码:要先引用程序集,在引入这个命名空间1234//------------------------ ----------------------------------------------------------------- -----//使用DataContractJsonSerializer方式需要引入的命名空间,在System.Runtime.Se rialization.dll.中usingSystem.Runtime.Serialization.Json;//------ ----------------------------------------------------------------- ---------------------12345678910111213141516171819202122232425262 728293031323334#region1.DataContractJsonSerializer方式序列化和反序列化?Stu dentstu=?new?Student()?{?ID=1,?Name=?"曹操",?Sex=?"男",?Age= 1000?};?//序列化?DataContractJsonSerializerjs=?new?DataContractJso nSerializer(typeof(Student));?MemoryStreammsObj=?new?MemoryStre am(www.46club.com);?//将序列化之后的Json格式数据写入流中?js.WriteObject(msObj,s tu);?msObj.Position=0;?//从0这个位置开始读取流中的数据?StreamReadersr=?new? StreamReader(msObj,Encoding.UTF8);?stringjson=sr.ReadToEnd(); ?sr.Close();?msObj.Close();?Console.WriteLine(json);?//反序列化?strin gtoDes=json;?//stringto="{\"ID\":\"1\",\"Name\":\"曹操\",\"Se x\":\"男\",\"Age\":\"1230\"}";?using(var?ms=?new?MemoryStream(En coding.Unicode.GetBytes(toDes)))?{?DataContractJsonSerializerdes eralizer=?new?DataContractJsonSerializer(typeof(Student));?Stude ntmodel=(Student)deseralizer.ReadObject(ms);////反序列化ReadObjec t?Console.WriteLine("ID="?+model.ID);?Console.WriteLine("Name="? +model.Name);?Console.WriteLine("Age="?+model.Age);?Console.Wri teLine("Sex="?+model.Sex);?}?Console.ReadKey();?#endregion运行之后结果 是:再看看使用JavaScriptJsonSerializer的情况:JavaScriptSerializerisaclas swhichhelpstoserializeanddeserializeJSON.Itispresentin namespaceSystem.Web.Script.Serializationwhichisavailablein assemblySystem.Web.Extensions.dll.Toserializea.Netobjectto JSONstringuseSerializemethod.It''spossibletodeserializeJ SONstringto.NetobjectusingDeserializeorDeserializeObje ctmethods.Let''sseehowtoimplementserializationanddeserial izationusingJavaScriptSerializer.这里要先引用1234//------------------ ----------------------------------------------------------------- ------//使用JavaScriptSerializer方式需要引入的命名空间,这个在程序集System.Web.Extens ions.dll.中usingSystem.Web.Script.Serialization;//--------------- ----------------------------------------------------------------- --------123456789101112131415161718192021222324#region2.JavaScri ptSerializer方式实现序列化和反序列化?Studentstu=?new?Student()?{?ID=1,?Na me=?"关羽",?Age=2000,?Sex=?"男"?};?JavaScriptSerializerjs=?new ?JavaScriptSerializer();?stringjsonData=js.Serialize(stu);//序列 化?Console.WriteLine(jsonData);?////反序列化方式一:?stringdesJson=json Data;?//Studentmodel=js.Deserialize(desJson);////反序列 化?//stringmessage=string.Format("ID={0},Name={1},Age={2},Sex={ 3}",model.ID,model.Name,model.Age,model.Sex);?//Console.Write Line(message);?//Console.ReadKey();?////反序列化方式2?dynamicmodelDy= js.Deserialize(desJson);?//反序列化?stringmessageDy=stri ng.Format("动态的反序列化,ID={0},Name={1},Age={2},Sex={3}",?modelDy["ID" ],modelDy["Name"],modelDy["Age"],modelDy["Sex"]);//这里要使用索引取值,不 能使用对象.属性?Console.WriteLine(messageDy);?Console.ReadKey(www.jiekeq ipai.net);?#endregion结果是:最后看看使用JSON.NET的情况,引入类库:下面的英文,看不懂可略过。。。Js on.NETisathirdpartylibrarywhichhelpsconversionbetweenJS ONtextand.NETobjectusingtheJsonSerializer.TheJsonSeriali zerconverts.NETobjectsintotheirJSONequivalenttextandbac kagainbymappingthe.NETobjectpropertynamestotheJSONpro pertynames.Itisopensourcesoftwareandfreeforcommercialp urposes.Thefollowingaresomeawesome【极好的】features,FlexibleJSO Nserializerforconvertingbetween.NETobjectsandJSON.LINQto JSONformanuallyreadingandwritingJSON.Highperformance,fas terthan.NET''sbuilt-in【内嵌】JSONserializers.EasytoreadJSON.C onvertJSONtoandfromXML.Supports.NET2,.NET3.5,.NET4,Si lverlightandWindowsPhone.?Let''sstartlearninghowtoinstall andimplement:InVisualStudio,gotoToolsMenu->ChooseLibrar yPackageManger->PackageManagerConsole.Itopensacommandw indowwhereweneedtoputthefollowingcommandtoinstallNewto nsoft.Json.Install-PackageNewtonsoft.JsonORInVisualStudio,Too lsmenu->ManageNugetPackageMangerSolutionandtype“JSON.NE T”tosearchitonline.Here''sthefigure,1234//使用Json.NET类库需要引入的 命名空间//----------------------------------------------------------- ------------------usingNewtonsoft.Json;//----------------------- --------------------------------------------------123456789101112 1314151617#region3.Json.NET序列化?ListlstStuModel=?new?L ist(www.267774.com)?{???new?Student(){ID=1,Name="张飞",Age =250,Sex="男"},?new?Student(){ID=2,Name="潘金莲",Age=300,Sex="女"}?};? //Json.NET序列化?stringjsonData=JsonConvert.SerializeObject(lstStuModel);?Console.WriteLine(jsonData);?Console.ReadKey();?//Json.NET反序列化?stringjson=@"{''Name'':''C#'',''Age'':''3000'',''ID'':''1'',''Sex'':''女''}";?StudentdescJsonStu=JsonConvert.DeserializeObject(json);//反序列化?Console.WriteLine(string.Format("反序列化:ID={0},Name={1},Sex={2},Sex={3}",descJsonStu.ID,descJsonStu.Name,descJsonStu.Age,descJsonStu.Sex));?Console.ReadKey();?#endregion运行之后,结果是: |
|