XmlSerializer中比SGen更深遂的問題

2021-04-17 18:46:34 字數 548 閱讀 3746

傳說中,.net的xmlserializer使用方便功能強,我們一直用它。只不過,它需要在執行時編譯出乙個或多個專門用來解析xml的dll。為了免除這部分執行時編譯開銷,便誕生了sgen,用來預先生成解析的dll。

但是,這裡有幾個沒有說清楚的問題。首先,我們是不需要去手工引用並使用生成的*.xmlserializer.dll的。只要把它放在程式目錄裡,不需要修改原有**,xmlserializer在構造時會自動去尋找它是否存在。存在則載入,否則按原先的方式編譯臨時dll。

其次,這個序列化dll不是總能被使用。事實上,只有使用xmlserializer的ctor(), ctor(type), ctor(type, string)這三個建構函式時,預生成的dll才可以使用。而且對ctor(type, string)的形式,第二個引數namespace必須和sgen所使用的namespace一致。對於其他建構函式,不但不能使用預生成的dll,而且會每次構造時都重新生成乙個新的dll,即使構造引數完全相同。所以,這些複雜建構函式很**,一般盡量避免。

最後,比較不爽的是,sgen缺省會把所有可能序列化的型別都處理了……有點浪費。

XmlSerializer 類的使用

類user using system using system.data using system.configuration using system.web using system.web.security using system.web.ui using system.web.ui.web...

XmlSerializer 生成Xml檔案

獲取工廠類 xmlpullparse ctory factory xmlpullparse ctory.newinstance 獲取xmlserializer類 xmlserializer serializer factory.newserializer 獲取檔案輸出流 outputstream o...

利用XMLSerializer將物件序列化到XML

微軟已經意識到序列化資料的重要性,因此在.net框架中包含了命名空間system.runtime.serialization和system.xml.serialization以提供序列化功能,為使用者自己編寫序列化方法提供了乙個框架。system.xml.serialization命名空間提供了將乙...