创建对象的序列化文件 - SoapFormatter,binaryFormatter以及XmlSerializer序列化文件的比较...
序列化本身就是要將對象轉換成為數據流, 這樣便于存儲和傳輸.
SoapFormatter和binaryFormatter都是一種Formatter,原本我以為XmlSerializer也是繼承了IFormatter接口,后來發(fā)現不是.
關于formatter和Iformatter,可以到命名空間 System.Runtime.Serialization.Formatters 查看
關于使用比較
// 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();
?
可以使用(定義)不同的格式器來創(chuàng)建對象的序列化.
比如 SoapFormatter, binaryFormatter
當然也可以完全繼承一個Formatter來定義自己的格式化器.
SoapFormatter, binaryFormatter 是無法繼承的,它們是實現了 IFormatter接口, 而xmlSerializer沒有實現接口IFormatter,但我們可以定義類繼承于它
序列化導出內容的不同.
如果我們想控制序列化出來的內容,我們有兩個途徑來控制, 一個是定義自己的格式化器,另一個則是被序列化對象實現接口 System.Runtime.Serialization.ISerializable.
格式化器里面有一個方法:
public override void Serialize(System.IO.Stream serializationStream, object graph)
ISerializable 里面有一個方法:
public void GetObjectData(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context)
需要注意的是, 盡管對象實現了ISerializable, 如果使用xmlSerializer導出內容仍然不變.
注意以下文字
序列化過程的步驟
在格式化程序上調用 serialize 方法時,對象序列化按照以下規(guī)則進行:
檢查格式化程序是否有代理選取器。如果有,檢查代理選取器是否處理指定類型的對象。如果選取器處理此對象類型,將在代理選取器上調用 iserializable.getobjectdata。
如果沒有代理選取器或有卻不處理此類型,將檢查是否使用 serializable 屬性對對象進行標記。如果未標記,將會引發(fā) serializationexception。
如果對象已被正確標記,將檢查對象是否實現了 iserializable。如果已實現,將在對象上調用 getobjectdata。
如果對象未實現 serializable,將使用默認的序列化策略,對所有未標記為 nonserialized 的字段都進行序列化。
?
關于對象序列化,可以在網上搜索一下這篇文章<<.NET 中的對象序列化>>
?
我這里有一個問題, 最近傳送一個dataset的時候,我直接使用的 datatset.getxml()獲取的序列文件,是否可以自己定義一個formatter來序列它呢?
總結
以上是生活随笔為你收集整理的创建对象的序列化文件 - SoapFormatter,binaryFormatter以及XmlSerializer序列化文件的比较...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 二十年最强悍病毒排行榜
- 下一篇: 利用ASP.NET输出指定内容的WORD