ICANN认证国际域名顶级注册机构
网站建设,域名注册,空间租用,软件销售,广告设计 域名注册,空间租用, 网站建设,东莞网页设计,域名注册,网站推广,网站开发,网页设计 网站推广,,百度推广,新浪推广,雅虎推广,网易推广 标志设计,画册设计,包装设计,VI策划,企业形象顾问 连邦软件加盟店,提供销遥行,管家婆,速达,用友ERP,诺顿等软件报价及销售 建站必读 腾达网络,上网帮助中心, 腾达为东莞等地,提供网站建设,网站推广,广告设计,软件销售等优质服务!
建站必读


 
 
当前位置:首页 -> 建站必读 -> .NET技术
.Net里的序列化
什么是序列化?

---.net的运行时环境用来支持用户定义类型的流化的机制。它是将对象实例的状态存储到存储媒体的过程。在此过程中,先将对象的公共字段和私有字段以及类的名称(包括类所在的程序集)转换为字节流,然后再把字节流写入数据流。在随后对对象进行反序列化时,将创建出与原对象完全相同的副本。



序列化的目的:

1、以某种存储形式使自定义对象持久化;

2、将对象从一个地方传递到另一个地方。



实质上序列化机制是将类的值转化为一个一般的(即连续的)字节流,然后就可以将该流写到磁盘文件或任何其他流化目标上。而要想实际的写出这个流,就要使用那些实现了IFormatter接口的类里的Serialize和Deserialize方法。

在.net框架里提供了这样两个类:



一、BinaryFormatter



BinaryFormatter使用二进制格式化程序进行序列化。您只需创建一个要使用的流和格式化程序的实例,然后调用格式化程序的 Serialize 方法。流和要序列化的对象实例作为参数提供给此调用。类中的所有成员变量(甚至标记为 private 的变量)都将被序列化。



首先我们创建一个类:

[Serializable]

public class MyObject {

public int n1 = 0;

public int n2 = 0;

public String str = null;

}

Serializable属性用来明确表示该类可以被序列化。同样的,我们可以用NonSerializable属性用来明确表示类不能被序列化。

接着我们创建一个该类的实例,然后序列化,并存到文件里持久:

MyObject obj = new MyObject();

obj.n1 = 1;

obj.n2 = 24;

obj.str = "一些字符串";

IFormatter formatter = new BinaryFormatter();

Stream stream = new FileStream("MyFile.bin", FileMode.Create,

FileAccess.Write, FileShare.None);

formatter.Serialize(stream, obj);

stream.Close();



而将对象还原到它以前的状态也非常容易。首先,创建格式化程序和流以进行读取,然后让格式化程序对对象进行反序列化。

IFormatter formatter = new BinaryFormatter();

Stream stream = new FileStream("MyFile.bin", FileMode.Open,

FileAccess.Read, FileShare.Read);

MyObject obj = (MyObject) formatter.Deserialize(fromStream);

stream.Close();



// 下面是证明

Console.WriteLine("n1: {0}", obj.n1);

Console.WriteLine("n2: {0}", obj.n2);

Console.WriteLine("str: {0}", obj.str);



二、SoapFormatter



前面我们用BinaryFormatter以二进制格式来序列化。很容易的我们就能把前面的例子改为用SoapFormatter的,这样将以xml格式化,因此能有更好的可移植性。所要做的更改只是将以上代码中的格式化程序换成 SoapFormatter,而 Serialize 和 Deserialize 调用不变。对于上面使用的示例,该格式化程序将生成以下结果。



<SOAP-ENV:Envelope

xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance

xmlns:xsd="http://www.w3.org/2001/XMLSchema"

xmlns:SOAP- ENC=http://schemas.xmlsoap.org/soap/encoding/

xmlns:SOAP- ENV=http://schemas.xmlsoap.org/soap/envelope/

SOAP-ENV:encodingStyle=

"http://schemas.microsoft.com/soap/encoding/clr/1.0

http://schemas.xmlsoap.org/soap/encoding/"

xmlns:a1="http://schemas.microsoft.com/clr/assem/ToFile">



<SOAP-ENV:Body>

<a1:MyObject id="ref-1">

<n1>1</n1>

<n2>24</n2>

<str id="ref-3">一些字符串</str>

</a1:MyObject>

</SOAP-ENV:Body>

</SOAP-ENV:Envelope>



在这里需要注意的是,无法继承 Serializable 属性。如果从 MyObject 派生出一个新的类,则这个新的类也必须使用该属性进行标记,否则将无法序列化。例如,如果试图序列化以下类实例,将会显示一个 SerializationException,说明 MyStuff 类型未标记为可序列化。



public class MyStuff : MyObject

{

public int n3;

}



然而关于格式化器,还有个问题,假设我们只需要xml,但不需要soap特有的额外信息,那么该怎么做?有两个方案:1、编写一个实现IFormatter接口的类,采用的方式类似于SoapFormatter,但是可以没有你不需要的信息;2、使用框架提供的类XmlSerializer。

XmlSerializer类和前两个主流的序列化类的几个不同点是:

1、不需要Serializable属性,Serializable和NonSerializable属性将会被忽略,但是使用XmlIgnore属性,和NonSerializable属性类似。

2、该类不能安全地访问私有变成员,所以学要将私有成员改为公共成员,或者
 
 
本站关键词:
|东莞商标注册|东莞yahoo推广|东莞网络实名|东莞百度baidu推广|东莞google推广|东莞关键词推广|东莞网站推广策划|东莞域名申请|东莞主机申请|东莞空间申请|东莞网站建设|东莞网页设计||东莞商标注册|东莞yahoo推广|东莞网络实名|东莞百度baidu推广|东莞google推广|东莞关键词推广|东莞网站推广策划|东莞域名申请|东莞主机申请|东莞空间申请|东莞网站建设|东莞网页设计||东莞商标注册|东莞yahoo推广|东莞网络实名|东莞百度baidu推广|东莞google推广|东莞关键词推广|东莞网站推广策划|东莞域名申请|东莞主机申请|东莞空间申请|东莞网站建设|东莞网页设计||东莞商标注册|东莞yahoo推广|东莞网络实名|东莞百度baidu推广|东莞google推广|东莞关键词推广|东莞网站推广策划|东莞域名申请|东莞主机申请|东莞空间申请|东莞网站建设|东莞网页设计||东莞商标注册|东莞yahoo推广|东莞网络实名|东莞百度baidu推广|东莞google推广|东莞关键词推广|东莞网站推广策划|东莞域名申请|东莞主机申请|东莞空间申请|东莞网站建设|东莞网页设计||东莞商标注册|东莞yahoo推广|东莞网络实名|东莞百度baidu推广|东莞google推广|东莞关键词推广|东莞网站推广策划|东莞域名申请|东莞主机申请|东莞空间申请|东莞网站建设|东莞网页设计||东莞商标注册|东莞yahoo推广|东莞网络实名|东莞百度baidu推广|东莞google推广|东莞关键词推广|东莞网站推广策划|东莞域名申请|东莞主机申请|东莞空间申请|东莞网站建设|东莞网页设计||东莞商标注册|东莞yahoo推广|东莞网络实名|东莞百度baidu推广|东莞google推广|东莞关键词推广|东莞网站推广策划|东莞域名申请|东莞主机申请|东莞空间申请|东莞网站建设|东莞网页设计||东莞商标注册|东莞yahoo推广|东莞网络实名|东莞百度baidu推广|东莞google推广|东莞关键词推广|东莞网站推广策划|东莞域名申请|东莞主机申请|东莞空间申请|东莞网站建设|东莞网页设计||东莞商标注册|东莞yahoo推广|东莞网络实名|东莞百度baidu推广|东莞google推广|东莞关键词推广|东莞网站推广策划|东莞域名申请|东莞主机申请|东莞空间申请|东莞网站建设|东莞网页设计||东莞商标注册|东莞yahoo推广|东莞网络实名|东莞百度baidu推广|东莞google推广|东莞关键词推广|东莞网站推广策划|东莞域名申请|东莞主机申请|东莞空间申请|东莞网站建设|东莞网页设计||东莞商标注册|东莞yahoo推广|东莞网络实名|东莞百度baidu推广|东莞google推广|东莞关键词推广|东莞网站推广策划|东莞域名申请|东莞主机申请|东莞空间申请|东莞网站建设|东莞网页设计||东莞商标注册|东莞yahoo推广|东莞网络实名|东莞百度baidu推广|东莞google推广|东莞关键词推广|东莞网站推广策划|东莞域名申请|东莞主机申请|东莞空间申请|东莞网站建设|东莞网页设计||东莞商标注册|东莞yahoo推广|东莞网络实名|东莞百度baidu推广|东莞google推广|东莞关键词推广|东莞网站推广策划|东莞域名申请|东莞主机申请|东莞空间申请|东莞网站建设|东莞网页设计|
域名注册 | 虚拟主机 | 网站建设 | 网站推广 | 广告设计 | 帮助中心 | 软件中心 | 关于腾达
东莞市腾达信息工程有限公司      本站网络实名: 东莞网站建设
地址:东莞市新城市中心区第一国际B座610   邮编:523007
电话:0769-22026071 22026072 传真:0769-22026076 24小时服务热线:13712032014
© 2002~2005 腾达网络   版权所有