来自:mjsws > 馆藏分类
配色: 字号:
Json怎么实现序列化与反序列化
2018-04-25 | 阅:  转:  |  分享 
  
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运行之后,结果是:
献花(0)
+1
(本文系mjsws首藏)