asp.net JSON 序列化技术分析

在ASP.NET 3.5开始,.NET平台下共支持两种序列化方式:


代码如下:

1.DataContractSerializer
2.JavascriptSerializer

前者主要是根据数据契约(DataContract)进行序列化,通过如下定义的数据契约:
代码


代码如下:

<DataMember()> _
Public Class Model
<DataMember()> Public Property PropertyA As String
<DataMember()> Public Property PropertyB As String
<IgnoreDataMember()> Public Property PropertyC As String
End Class

其中会根据<DataMember>和<IgnoreDataMember>进行属性是否序列化的判断。
根据数据契约序列化是有缺点的,它的缺点在于在数据类定义之初就需要对属性是否进行序列化进行判定,对于在各处使用的数据模型(Data Model)可能会导致需要全部指定为DataMember,而将无用的属性还有带有默认值(例如Nothing或Null)的属性也同样进行序列化;二是,序列化不能使用属性别名,在业务中定义的名称可能过长,而如果不能指定属性别名就会浪费带宽,导致服务器端与客户端之间的通信变慢。
PageMethod是使用JSON序列化技术的最佳使用场景,在页面实现异步调用(AJAX调用),而不用把所有逻辑都写在服务中,UI方面的业务逻辑判断处理可以写在PageMethod中。在画面插入如下ScriptManager声明并指定EnablePageMethods为True即可将PageMethod打开。
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true">
</asp:ScriptManager>
很多人看到的实例都是通过MS AJAX进行PageMethod的调用,但因为近两年微软在做ASP.NET与jQuery方面的合作实验,我们其实也可以通过jQuery进行PageMethod的调用。但jQuery的调用方法无法使用GET,只要POST空JSON对象即可实现类GET调用。脚本如下:


代码如下:

$.ajax({
type: "POST",
url: "Default.aspx/GetJSON",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
alert(msg);
}
});

PageMethod生命方法如下:


代码如下:

<WebMethod()> _
Public Shared Function GetJSON() As String
Dim list As New List(Of Model)
For index As Integer = 0 To 1000
Dim m_JSON As New Model With {.PropertyA = "Hello", .PropertyB = "World"}
list.Add(m_JSON)
Next
Dim str As String = JSONHelper.Serialize(list)
Return str
End Function
[code]
其中Model类定义如下:
[code]
<DataContract()> _
Public Class Model
<DataMember(EmitdefaultValue:=False, IsRequired:=False, Name:="A")> Public Property PropertyA As String
<DataMember(EmitdefaultValue:=False, IsRequired:=False, Name:="B")> Public Property PropertyB As String
<DataMember(EmitdefaultValue:=False, IsRequired:=False, Name:="C")> Public Property PropertyC As String
End Class

序列化的Model实例结果为:
{"A":"Hello","B":"World"}
这里再给大家提供一下网上比较流行的JSON转换类,使用的是JavascriptSerializer,代码如下:


代码如下:

Public Class JSONHelper
Public Shared Function Serialize(Of T)(ByVal obj As T) As String
Dim serializer As New System.Runtime.Serialization.Json.DataContractJsonSerializer(obj.GetType())
Dim ms As New MemoryStream()
serializer.WriteObject(ms, obj)
Dim retVal As String = Encoding.Default.GetString(ms.ToArray())
Return retVal
End Function
Public Shared Function Deserialize(Of T)(ByVal json As String) As T
Dim obj As T = Activator.CreateInstance(Of T)()
Dim ms As New MemoryStream(Encoding.Unicode.GetBytes(json))
Dim serializer As New System.Runtime.Serialization.Json.DataContractJsonSerializer(obj.GetType())
obj = CType(serializer.ReadObject(ms), T)
ms.Close()
Return obj
End Function
End Class

(0)

相关推荐

  • C# 三种序列化方法分享

    序列化是将一个对象转换成字节流以达到将其长期保存在内存.数据库或文件中的处理过程.它的主要目的是保存对象的状态以便以后需要的时候使用.与其相反的过程叫做反序列化. 序列化一个对象为了序列化一个对象,我们需要一个被序列化的对象,一个容纳被序列化了的对象的(字节)流和一个格式化器.进行序列化之前我们先看看System.Runtime.Serialization名字空间.ISerializable接口允许我们使任何类成为可序列化的类. 如果我们给自己写的类标识[Serializable]特性,我们就能

  • Jquery 组合form元素为json格式,asp.net反序列化

    作者:敖士伟 Email:ikmb@163.com 转载注明作者 说明: 1.js根据表单元素class属性,把表单元素的name和value组合为json格式;用表单元素class属性可以针对性地组合JSON数据. 2.后端ASP.NET用JavaScriptSerializer反序列化为对象实列. 3.好处:简化了前端数据读取与后端数据赋值. 复制代码 代码如下: function GetJSONStr(class_name) { var a = []; //文本框 $("." +

  • c#对象反序列化与对象序列化示例详解

    1.对象序列化的介绍 (1).NET支持对象序列化的几种方式二进制序列化:对象序列化之后是二进制形式的,通过BinaryFormatter类来实现的,这个类位于System.Runtime.Serialization.Formatters.Binary命名空间下.SOAP序列化:对象序列化之后的结果符合SOAP协议,也就是可以通过SOAP 协议传输,通过System.Runtime.Serialization.Formatters.Soap命名空间下的SoapFormatter类来实现的.XML

  • asp.net 序列化and反序列化演示

    什么是序列化? ---.net的运行时环境用来支持用户定义类型的流化的机制.它是将对象实例的状态存储到存储媒体的过程.在此过程中,先将对象的公共字段和私有字段以及类的名称(包括类所在的程序集)转换为字节流,然后再把字节流写入数据流.在随后对对象进行反序列化时,将创建出与原对象完全相同的副本. 序列化的目的: 1.以某种存储形式使自定义对象持久化: 2.将对象从一个地方传递到另一个地方. 实质上序列化机制是将类的值转化为一个一般的(即连续的)字节流,然后就可以将该流写到磁盘文件或任何其他流化目标上

  • C#实现复杂XML的序列化与反序列化

    本文以一个实例的形式讲述了C#实现复杂XML的序列化与反序列化的方法.分享给大家供大家参考.具体方法如下: 已知.xml(再此命名default.xml)文件,请将其反序列化到一个实例对象. Default.XML文件如下: <?xml version="1.0" encoding="utf-8" ?> <config> <rules> <rule name="namea"> <params&

  • ASP.NET中JSON的序列化和反序列化使用说明

    在网站应用中使用JSON的场景越来越多,本文介绍 ASP.NET中JSON的序列化和反序列化,主要对JSON的简单介绍,ASP.NET如何序列化和反序列化的处理,在序列化和反序列化对日期时间.集合.字典的处理. 一.JSON简介 JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换格式. JSON是"名值对"的集合.结构由大括号'{}',中括号'[]',逗号',',冒号':',双引号'""'组成,包含

  • .net实现序列化与反序列化实例解析

    序列化与反序列化是.net程序设计中常见的应用,本文即以实例展示了.net实现序列化与反序列化的方法.具体如下: 一般来说,.net中的序列化其实就是将一个对象的所有相关的数据保存为一个二进制文件(注意:是一个对象) 而且与这个对象相关的所有类型都必须是可序列化的所以要在相关类中加上 [Serializable]特性 对象类型包括:对象本身包含的类型,父类 拥有需要的对象之后: 1.将对象转换为二进制数据 使用专门的对像进行转换 BinaryFormatter 2.将二进制数据写入到文件 Fil

  • asp.net xml序列化与反序列化第1/2页

    在网上找了一些关于xml序列化与反序列化的资料,摘录下:        在.NET下有一种技术叫做对象序列化,它可以将对象序列化为二进制文件.XML文件.SOAP文件,这样, 使用经过序列化的流进行传输效率就得到了大大的提升. 在.NET中提供了两种序列化:二进制序列化.XML和SOAP序列化.对于WEB应用来说,用得最多的是第二种---XML和SOAP序列化. XML 序列化将对象的公共字段和属性或者方法的参数和返回值转换(序列化)为符合特定 XML 架构定义 语言 (XSD) 文档的 XML

  • C#中datatable序列化与反序列化实例分析

    本文实例讲述了C#中datatable序列化与反序列化,分享给大家供大家参考.具体方法如下: 一.datatable序列化 public string getSendDetailQuery(DateTime timeS, DateTime timeE, string sccount) { try { SmsOperate so = new SmsOperate(); //得到dt DataTable dtt = so.getSendDetailQuery(timeS, timeE, sccoun

  • c#正反序列化XML文件示例(xml序列化)

    复制代码 代码如下: using System.Collections.Generic;using System.Linq;using System.Reflection;using System.Text;using System.Text.RegularExpressions;using System.Xml.Serialization;using System.IO;using System; namespace GlobalTimes.Framework{    /// <summar

  • c#泛型序列化对象为字节数组的示例

    序列化对象为字节数组 复制代码 代码如下: using System.IO;using System.Runtime.Serialization.Formatters.Binary;        protected byte[] Serialize<T>(T t)        {            MemoryStream mStream = new MemoryStream();            BinaryFormatter bFormatter = new BinaryFo

  • .net的序列化与反序列化实例

    本文实例讲述了.net的序列化与反序列化的实现方法.分享给大家供大家参考.具体方法如下: 1.序列化与反序列化概述 C#中如果需要:将一个结构很复杂的类的对象存储起来,或者通过网路传输到远程的客户端程序中去,这时就需要用到序列化,反序列化(Serialization & Deserialization) 2.BinaryFormattter .NET中串行有三种,BinaryFormatter, SoapFormatter和XmlSerializer. 其中BinaryFormattter最简单

随机推荐