日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

创建对象的序列化文件 - SoapFormatter,binaryFormatter以及XmlSerializer序列化文件的比较...

發(fā)布時(shí)間:2025/6/15 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 创建对象的序列化文件 - SoapFormatter,binaryFormatter以及XmlSerializer序列化文件的比较... 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

序列化本身就是要將對(duì)象轉(zhuǎn)換成為數(shù)據(jù)流, 這樣便于存儲(chǔ)和傳輸.

SoapFormatter和binaryFormatter都是一種Formatter,原本我以為XmlSerializer也是繼承了IFormatter接口,后來(lái)發(fā)現(xiàn)不是.

關(guān)于formatter和Iformatter,可以到命名空間 System.Runtime.Serialization.Formatters 查看

關(guān)于使用比較

// create a file stream to write the file
FileStream fileStream = new FileStream("DoSum.bin", FileMode.Create);
// use the CLR binary formatter
BinaryFormatter binaryFormatter = new BinaryFormatter();
// serialize to disk
binaryFormatter.Serialize(fileStream, sObj);
fileStream.Close();

xmlSerializer 比較不同

// create a file stream to write the file
??????????? FileStream fileStream = new FileStream("DoSum.xml", FileMode.Create);
??????????? // use the CLR binary formatter
??????????? System.Xml.Serialization.XmlSerializer
??????????????? formatter = new XmlSerializer(typeof(SumOf));
??????????? // serialize to disk
??????????? formatter.Serialize(fileStream, sObj);
??????????? fileStream.Close();

?

可以使用(定義)不同的格式器來(lái)創(chuàng)建對(duì)象的序列化.

比如 SoapFormatter, binaryFormatter

當(dāng)然也可以完全繼承一個(gè)Formatter來(lái)定義自己的格式化器.

SoapFormatter, binaryFormatter 是無(wú)法繼承的,它們是實(shí)現(xiàn)了 IFormatter接口, 而xmlSerializer沒(méi)有實(shí)現(xiàn)接口IFormatter,但我們可以定義類繼承于它

序列化導(dǎo)出內(nèi)容的不同.

如果我們想控制序列化出來(lái)的內(nèi)容,我們有兩個(gè)途徑來(lái)控制, 一個(gè)是定義自己的格式化器,另一個(gè)則是被序列化對(duì)象實(shí)現(xiàn)接口 System.Runtime.Serialization.ISerializable.

格式化器里面有一個(gè)方法:

public override void Serialize(System.IO.Stream serializationStream, object graph)

ISerializable 里面有一個(gè)方法:

public void GetObjectData(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context)

需要注意的是, 盡管對(duì)象實(shí)現(xiàn)了ISerializable, 如果使用xmlSerializer導(dǎo)出內(nèi)容仍然不變.

注意以下文字

序列化過(guò)程的步驟
在格式化程序上調(diào)用 serialize 方法時(shí),對(duì)象序列化按照以下規(guī)則進(jìn)行:
檢查格式化程序是否有代理選取器。如果有,檢查代理選取器是否處理指定類型的對(duì)象。如果選取器處理此對(duì)象類型,將在代理選取器上調(diào)用 iserializable.getobjectdata。
如果沒(méi)有代理選取器或有卻不處理此類型,將檢查是否使用 serializable 屬性對(duì)對(duì)象進(jìn)行標(biāo)記。如果未標(biāo)記,將會(huì)引發(fā) serializationexception。
如果對(duì)象已被正確標(biāo)記,將檢查對(duì)象是否實(shí)現(xiàn)了 iserializable。如果已實(shí)現(xiàn),將在對(duì)象上調(diào)用 getobjectdata。
如果對(duì)象未實(shí)現(xiàn) serializable,將使用默認(rèn)的序列化策略,對(duì)所有未標(biāo)記為 nonserialized 的字段都進(jìn)行序列化。

?

關(guān)于對(duì)象序列化,可以在網(wǎng)上搜索一下這篇文章<<.NET 中的對(duì)象序列化>>

?

我這里有一個(gè)問(wèn)題, 最近傳送一個(gè)dataset的時(shí)候,我直接使用的 datatset.getxml()獲取的序列文件,是否可以自己定義一個(gè)formatter來(lái)序列它呢?

總結(jié)

以上是生活随笔為你收集整理的创建对象的序列化文件 - SoapFormatter,binaryFormatter以及XmlSerializer序列化文件的比较...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。