手机版

ASPNET中JSON的序列化和反序列化方法

时间:2021-09-11 来源:互联网 编辑:宝哥软件园 浏览:

一、JSON简介

JSON是一种轻量级的数据交换格式。

JSON是名称-值对的集合。该结构由大括号“{ 0 }”、中括号“[]”、逗号“,”、冒号“:”、双引号“”组成,包含Object、number、boolean、string、array、null等数据类型。

JSON有以下形式:

对象是名称-值对的无序集合。对象以“{”开头,以“}”结尾。每个“名字”后面跟一个“:”,多个“名称-值对”用逗号分隔。例如:

Var user={'name': '张三',' gender': '男','生日' :'1980-8-8'} Array是一个有序的值集合,一个数组以“[”开头,以“]”结尾,值如:

复制代码如下: var User list=[{'User' : { ' Name ' : '张三','性别' : '男','生日' 3360' 1980-8-8'},{ ' User ' :

字符串是由双引号括起来的任意数量的Unicode字符组成的集合,通过反斜杠进行转义。

第二,序列化和反序列化JSON数据

您可以使用DataContractJsonSerializer类将类型实例序列化为JSON字符串,并将JSON字符串反序列化为类型实例。DataContractJsonSerializer在SystemRuntimeSerializationJson命名空间下,NET Framework 5包含在SystemServiceModelWebdll中,需要给它添加一个引用;那个。NET Framework 4在SystemRuntimeSerialization中。

由DataContractJsonSerializer序列化和反序列化的代码:

使用系统;使用SystemCollectionsGeneric使用SystemLinq使用SystemWeb使用SystemRuntimeSerializationJson;使用SystemIO使用SystemText///summary////JSON序列化和反序列化辅助类////summary公共类JSON helper {///summary////JSON序列化////summary公共静态字符串JSON序列化程序(T ^ T){ DataContractJsonSerializer ser=new DataContractJsonSerializer(type of(T));memory stream ms=new memory stream();serWriteObject(ms,t);string jsonString=EncodingUTFGetString(msToArray());msClose();返回jsonString}///summary////JSON反序列化////summary public static t JSON serializer(string JSON string){ datacontractjsonserializer ser=new datacontractjsonserializer(类型为(t));memory stream ms=new memory stream(EncodingUTFGetBytes(jsonString));T obj=(T)SerReadObject(ms);返回对象;}}序列化演示:

简单对象人:

公共类Person {公共字符串Name { get设置;} public int Age { get设置;}}序列化为JSON字符串:

受保护的void Page_Load(对象发送者,事件参数e){ Person p=new Person();PName='张三';pAge=28string jsonString=JsonHelperJsonSerializerPerson(p);ResponseWrite(jsonString);}输出结果:

{ '年龄' :28,'姓名' : '张三' }反序列化演示:

受保护的void page _ load(对象发送方,event args e){ string JSON string=' { \ ' age ' :28,\ ' name \ ' : '张三\ ' } ';Person p=JsonHelper。jsondserializeperson(jsonString);}操作结果:

ASP.NET的JSON序列化和反序列化也可以使用JavaScriptSerializer。在体制下。在名称空间中,您需要引用System.Web.Extensions.dll。你也可以用JSON.NET。

第三,JSON序列化和反序列化的日期和时间处理

JSON格式不直接支持日期和时间。DateTime值以“/date (700000500)/”的形式显示为JSON字符串,其中第一个数字(在提供的示例中为700000)是自1970年1月1日午夜起在格林尼治标准时间(非夏令时)中经过的毫秒数。这个数字可以是负数,表示以前的时间。该示例包括“0500”,表示时间属于Local类型,即反序列化时应转换为本地时区。如果没有这个部分,时间将反序列化为Utc。

修改人员类别并添加姓氏名称:

公共类人{公共字符串名称{ get设置;} public int Age { get设置;} public DateTime LastLoginTime { get;设置;} } Person p=new Person();p。名称='张三;年龄=28岁;p.LastLoginTime=DateTime .现在;字符串jsonString=JsonHelper .JsonSerializerPerson(p);序列化结果:

{'Age':28,' LastLoginTime ' : ' \/Date(1294499956278 0800)\/',' Name': '张三'}1 、在后台使用正则表达式对其替换处理。修改JsonHelper:

使用系统;使用系统集合通用使用SystemLinq使用SystemWeb使用SystemRuntimeSerializationJson;使用系统使用系统文本使用系统文本正则表达式;///summary ///JSON序列化和反序列化辅助类////摘要公共类JsonHelper { ///摘要////JSON序列化////汇总公共静态字符串jsonserializert(t ^ t){ datacontractjsonserializer ser=new datacontractjsonserializer(类型为(t));内存流ms=新内存流();serWriteObject(ms,t);string jsonString=EncodingUTFGetString(msToArray());msClose();//替换Json的日期字符串字符串p=@ ' \ \/Date \(\ d)\ \ d \)\ \/';match evaluator match evaluator=新的match evaluator(convertjsandatetodatestring);Regex reg=新regex(p);jsonString=Refreplace(jsonString,匹配赋值器);返回jsonString} ///summary ///JSON反序列化////摘要公共静态T JsonDeserializeT(字符串jsonString) { //将'年-月-日HHmmss '格式的字符串转为\/日期(1294499956278 0800)\/'格式字符串p=@ ' \ d { 4 }-\ d { 2 }-\ d { 2 } \ s \ d { 2 } \ d { 2 } \ d { 2 } ';匹配评估器匹配评估器=新的匹配评估器(convertdatestringtojsandate);Regex reg=新regex(p);jsonString=Refreplace(jsonString,匹配赋值器);DataContractJsonSerializer ser=new DataContractJsonSerializer(类型为(T));内存流ms=新的内存流(EncodingUTFGetBytes(jsonString));T obj=(T)SerReadObject(ms);返回对象;} ///摘要///将Json序列化的时间由/日期(1294499956278 0800)转为字符串////摘要私有静态字符串convertsandatetodatestring(Match m){ string result=stringmpty;DateTime dt=新的DateTime(1970,1,1);dt=dtadd毫秒(longParse(管理组[1]值));dt=dtToLocalTime();结果=dtToString(' yyyy-MM-DD HHmmss ');返回结果;} ///摘要///将时间字符串转为Json时间////摘要私有静态字符串convertdatestringtojsandate(Match m){ string result=stringmpty;日期时间dt=日期时间屁股(管理组[0]值);dt=dtToUniversalTime();TimeSpan ts=dt-datetime Arles(' 1970-01-01 ');result=stringFormat(' \ \/Date({ 0 } 0800)\ \/',tstotalmyers);返回结果;} }序列化演示:

人员p=新人员p。名称='张三;年龄=28岁;p.LastLoginTime=DateTime .现在;字符串jsonString=JsonHelper .JsonSerializerPerson(p);运行结果:

{ '年龄' :28,' Lastlogintime ' : ' 2011-01-09 01:00:56 ','姓名' : '张三'}反序列化演示:

字符串json=' { \ ' Age \ ' :28,\ ' LastLoginTime ' : ' 2011-01-09 00:30:00 \ ',\ ' Name \ ' : \ '张三\'}';p=JsonHelper .JSON serializeper son(JSON);运行结果:

在后台替换字符串适用范围比较窄,如果考虑到全球化的有多种语言还会更麻烦。

2、利用Java脚本语言处理

函数更改日期格式(JSON日期){ JSON日期=JSON日期。替换('/Date(',' ').替换(')/',' ');if(jsondate。indexof(')0){ jsondate=jsondate。子字符串(0,jsondate。indexof(');} else if(jsondate。indexof('-')0){ JSON date=JSON date。子字符串(0,jsondate。indexof('-');} var Date=new Date(解析器(JSON Date,10));var month=date.getMonth() 1 10?0 '(日期。getmonth()1)日期。get month()1;var CurrentDate=日期。GetDate()10?“0”日期。GetDate()日期。GetDate();返回日期。get full year()“-”月-”当前日期;}简单演示:

ChangeDateFormat(' \/Date(1294499956278 0800)\/');

结果:

2011-1-8

4.集合、字典和数组的JSON序列化和反序列化

在JSON数据中,所有集合、字典和数组都表示为数组。

ListT序列化:

列表人列表=新列表人(){新列表人(){姓名='张三',年龄=28},新列表人(){姓名='李四',年龄=25 } };字符串jsonString=JsonHelper。JsonSerializerListPerson(列表);序列化结果:

[{ \ ' age ' :28,\ ' name \ ' : \ ' Zhang JSON \ ' },{ \ ' age \ ' :25,\ ' name ' : ' Li Si \ ' }]字典不能如:

Dictionarystring,string dic=new Dictionarystring,string();Dic。添加('姓名','张三');驾驶员信息中心。添加('年龄',' 28 ');字符串jsonString=JsonHelper。JsonSerializer Dictionarystring,string(DIC);序列化结果:

[{\ '键' : '名称\ ',\ '值' : '张三\'},{\ '键' : '年龄\ ',\ '值' 3360 \ '

版权声明:ASPNET中JSON的序列化和反序列化方法是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。