最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
关于asp.net中JSON的序列化和反序列化
时间:2011-01-09 编辑:简简单单 来源:一聚教程网
json是专门为浏览器中的网页上运行的网页特效代码而设计的一种数据格式。在网站应用中使用json的场景越来越多,本文介绍asp教程.net中json的序列化和反序列化,主要对json的简单介绍,asp.net教程如何序列化和反序列化的处理,在序列化和反序列化对日期时间、集合、字典的处理。
一、json简介
json(javascript object notation,javascript对象表示法)是一种轻量级的数据交换格式。
json是“名值对”的集合。结构由大括号'{}',中括号'[]',逗号',',冒号':',双引号'“”'组成,包含的数据类型有object,number,boolean,string,array, null等。
json具有以下的形式:
对象(object)是一个无序的“名值对”集合,一个对象以”{”开始,”}”结束。每个“名”后跟着一个”:”,多个“名值对”由逗号分隔。如:
var user={"name":"张三","gender":"男","birthday":"1980-8-8"}
数组(array)是值的有序集合,一个数组以“[”开始,以“]”结束,值之间使用“,”分隔。如:
var userlist=[{"user":{"name":"张三","gender":"男","birthday":"1980-8-8"}},{"user":{"name":"李四","gender":"男","birthday":"1985-5-8"}}];
字符串(string)是由双引号包围的任意数量的unicode字符的集合,使用反斜线转义。
二、对json数据进行序列化和反序列化
可以使用datacontractjsonserializer类将类型实例序列化为json字符串,并将json字符串反序列化为类型实例。datacontractjsonserializer在system.runtime.serialization.json命名空间下,.net framework 3.5包含在system.servicemodel.web.dll中,需要添加对其的引用;.net framework 4在system.runtime.serialization中。
利用datacontractjsonserializer序列化和反序列化的代码:
1: using system; 2: using system.collections.generic; 3: using system.linq; 4: using system.web; 5: using system.runtime.serialization.json; 6: using system.io; 7: using system.text; 8: 9: ///
序列化demo:
简单对象person:
1: public class person 2: { 3: public string name { get; set; } 4: public int age { get; set; } 5: }
序列化为json字符串:
1: protected void page_load(object sender, eventargs e) 2: { 3: person p = new person(); 4: p.name = "张三"; 5: p.age = 28; 6: 7: string jsonstring = jsonhelper.jsonserializer
输出结果:
{"age":28,"name":"张三"}
反序列化demo:
1: protected void page_load(object sender, eventargs e) 2: { 3: string jsonstring = "{"age":28,"name":"张三"}"; 4: person p = jsonhelper.jsondeserialize
运行结果:
asp.net中的json序列化和反序列化还可以使用javascriptserializer,在system.web.script.serializatioin命名空间下,需引用system.web.extensions.dll.也可以使用json.net.
三、json序列化和反序列化日期时间的处理
json格式不直接支持日期和时间。datetime值值显示为“/date(700000+0500)/”形式的json字符串,其中第一个数字(在提供的示例中为 700000)是 gmt 时区中自 1970 年 1 月 1 日午夜以来按正常时间(非夏令时)经过的毫秒数。该数字可以是负数,以表示之前的时间。示例中包括“+0500”的部分可选,它指示该时间属于local类型,即它在反序列化时应转换为本地时区。如果没有该部分,则会将时间反序列化为utc。
修改person类,添加lastlogintime:
1: public class person 2: { 3: public string name { get; set; } 4: public int age { get; set; } 5: public datetime lastlogintime { get; set; } 6: } 1: person p = new person(); 2: p.name = "张三"; 3: p.age = 28; 4: p.lastlogintime = datetime.now; 5: 6: string jsonstring = jsonhelper.jsonserializer
序列化结果:
{"age":28,"lastlogintime":"/date(1294499956278+0800)/","name":"张三"}
1 、在后台使用正则表达式对其替换处理。修改jsonhelper:
1: using system; 2: using system.collections.generic; 3: using system.linq; 4: using system.web; 5: using system.runtime.serialization.json; 6: using system.io; 7: using system.text; 8: using system.text.regularexpressions; 9: 10: ///
序列化demo:
1: person p = new person(); 2: p.name = "张三"; 3: p.age = 28; 4: p.lastlogintime = datetime.now; 5: 6: string jsonstring = jsonhelper.jsonserializer
运行结果:
{"age":28,"lastlogintime":"2011-01-09 01:00:56","name":"张三"}
反序列化demo:
string json = "{"age":28,"lastlogintime":"2011-01-09 00:30:00","name":"张三"}";p=jsonhelper.jsondeserialize
运行结果:
在后台替换字符串适用范围比较窄,如果考虑到全球化的有多种语言还会更麻烦。
1: function changedateformat(jsondate) { 2: jsondate = jsondate.replace("/date(", "").replace(")/", ""); 3: if (jsondate.indexof("+") > 0) { 4: jsondate = jsondate.substring(0, jsondate.indexof("+")); 5: } 6: else if (jsondate.indexof("-") > 0) { 7: jsondate = jsondate.substring(0, jsondate.indexof("-")); 8: } 9: 10: var date = new date(parseint(jsondate, 10)); 11: var month = date.getmonth() + 1 < 10 ? "0" + (date.getmonth() + 1) : date.getmonth() + 1; 12: var currentdate = date.getdate() < 10 ? "0" + date.getdate() : date.getdate(); 13: return date.getfullyear() + "-" + month + "-" + currentdate; 14: }
简单demo :
changedateformat("/date(1294499956278+0800)/");
结果:
2011-1-8
四、json序列化和反序列化集合、字典、数组的处理
在json数据中,所有的集合、字典和数组都表示为数组。
list
1: list>(list);
序列化结果:
"[{"age":28,"name":"张三"},{"age":25,"name":"李四"}]"
字典不能直接用于json,dictionary字典转化为json并不是跟原来的字典格式一致,而是形式以dictionary的key作为名称”key“的值,以dictionary的value作为名称为”value“的值 。如:
1: dictionary
序列化结果:
1: "[{"key":"name","value":"张三"},{"key":"age","value":"28"}]"
相关文章
- asp.net JSON序列化与反序列化使用说明 07-23
- C#复制数组的两种方式及效率比较解读 10-24
- ASP.NET Identity用法解析 10-24
- ASP.NET MVC使用Identity增删改查用户介绍 10-24
- C语言中atoi函数模拟实现介绍 10-18
- .Net反向代理组件Yarp用法介绍 10-10