ASP.NET中的XML和JSON
一、DOM简介
1.XML
定义:XML是一种跨语言、跨平台的数据储存格式
2.什么是DOM
DOM(document object model)文档对象模型:是一种允许程序或脚本动态的访问更新文档内容、结构和样式的、独立于平台和语言的规范化接口。
2.DOM的分类(级别)
(1)level1
专注HTML和XML文档模型,含有文档导航和处理功能。
(2)level2
在level1基础上添加了样式表对象模型并提供了对XML命名空间的支持
(3)level3
规定了内容模型(DTD和Schemas)和文档验证。同时还规定了文档加载和保存、文档查看、文档格式化和关键事件。
3.DOM模型
1、元素节点(Element):节点类型(NodeType)为1
2、属性节点(Attribute):节点类型(NodeType)为2
3、文本节点(Text):节点类型(NodeType)3
4、注释节点(Comments):节点类型(NodeType)8
5、文档节点(Document):节点类型(NodeType)9
二、.NET中的DOM常用对象
.NET中基于DOM核心类
类名 |
说明 |
XmlDocument |
表示一个XML文档 |
XmlNode |
表示XML文档中的单个节点 |
XmlNodeList |
表示排序的节点集合 |
XmlElement |
表示一个元素 |
XmlAttribute |
表示一个属性 |
XmlAttributeCollection |
表示元素节点的属性集合 |
XmlText |
表示元素或属性的文本内容 |
1.XmlNode类
XmlNode类没有公共构造函数,所以不能用new关键字创建XmlNode示例
2.XmlDocument类
派生自XmlNode类,其实例表示一个Xml文档对象。
3.XmlNodeList类
一个节点集合类,其元素为XmlNode类型;XmlNodeList没有公共构造函数,因此不能创建和删除XmlNodeList类的实例。
4.XmlElement类
XML文档的核心,可以表示一个XML文档中的元素节点,派生自XmlNode类
三、JSON创建对象
1.JSON的构建结构
--》“键/值”对的集合。
--》值的有序列表
例:Javascript中创建JSON
var site= { url:"www.baidu.com", name:"百度", author:"baidu", say:function(){document.write(this.name+"say hello")} };
四、ASP.NET中的JSON序列化与反序列化
1)创建JSON序列化与反序列化的帮助类
using System; using System.Collections.Generic; using System.Ling; using System.Web; using System.IO; using System.Text; using System.Runtime.Serialization.Json; namespace xxxx { ///<summary> /// JSON序列化与反序列化的帮助类 ///</summary> public class JsonHelper { public static string JsonSerializer<T>(T t) { DataContractJsonSerializer ser=new DataContractJsonSerializer(typeof(T)); MemoryStream ms=new MemoryStream(); ser.WriteObject(ms,t); string jsonString=Encoding.UTF8.GetString(ms.ToArray()); ms.Close(); return jsonString; } //JSON反序列化 public static T JsonDeserialize<T>(String jsonString) { DataContractJsonSerializer ser= new DataContractJsonSerializer(type(T)); MemoryStream ms=new MemoryStream(Encoding.UTF8.getBytes(jsonString)); T obj=(T)ser.ReadObject(ms); return obj; } } }
2)创建Person类
public class Person { public string Name{get;set;} public int Age{get;set;} }
3)通过JSONHelper序列化Person对象
public partial class JSON_DeMO :System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { Person p= new Person(); p.Name="张三"; p.Age=28; string jsonString=JsonHelper.JsonSerializer<Person>(p); Respon.Write(jsonString); } }
5)通过JSONHelper反序列化JSON字符串,转换为Person对象
public partial class JSON_DEMO : System.Web.UI.Page { protected void Page_Load(object sender , EventArgs e) { string jsonString ="{\"Age\":28.\"Name\":\"张三\"}"; Person p=JsonHelper.JsonDeserialize<Person(jsonString); Response.Write("反序列化JSON字符串:“”+"<br/>); Response.Write("姓名:"+p.Name+"</br>"); Response.Write("年龄:"+p.Age); } }
例:JSON序列化和反序列化集合、字典、数组的处理
namespace WebJSONTest { public partial class WebForm1 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { List<Person> list = new List<Person> { new Person{Name="张三",Age=20,LastLoginTime=DateTime.Now}, new Person{Name="小白",Age=25,LastLoginTime=DateTime.Now} }; string jsonString = jsonHelper.JsonSerializer<List<Person>>(list); Response.Write(jsonString); } } }
2.XML与JSON对象比较
1)、客户端
对于Json数据,只需要调用JavaScript的Eval方法就可以将JSON字符串序列化成为Javascript对象,然后就可以直接访问了。
对于XML数据,其本身是一个DOM Tree的数据结构,开发人员必须使用DOM ApI来访问处理XML数据,且各个浏览器对DOM的支持也不尽相同。
2)、服务器端
在服务器想客户端传输数据时,由于XML出现比JSON早,所以XML优于JSON。
3)、安全性
JSON本来是Javascript的一个安全子集,不会含有赋值和调用。因此在将JSON数据转换成为Javascript对象的时候,许多Javascript库都使用Eval函数,所以在使用JSON作为数据交换格式的时候,必须保障JSON安全。(用正则表达式检查JSON数据是否含有恶意代码关键字)。在这一点上,XML相对来说更安全。
4)、性能
从数据传输量来看JSON要优于XML,JSON更轻量级一些。同时在数据的解析速度上,JSON也优于XML。
5)、数据验证的角度
XML的验证技术更成熟,而目前关于JSON的验证还比较少。