1. 程式人生 > >物件序列化:使用System.Xml.Serialization名稱空間(轉)

物件序列化:使用System.Xml.Serialization名稱空間(轉)

        要使用.NET進行物件的序列化,必須在解決方案中新增System.Xml的引用,並且在類檔案中引入System.Xml.Serialization名稱空間。這樣就可以在檔案中使用序列化所需要的各種特性了。
Imports System.Xml.Serialization
  如果對XML Serialization缺少了解,請首先參考拙文:在.NET中實現物件序列化
<?xml version="1.0" encoding="utf-8"?>
<order id=”123456”> 
    
<orderDate>2005-04-05</orderDate> 
    
<items> 
        
<item> 
            
<name>物件序列化</name> 
        
</item> 
    
</items> 
</order>
   上面的例子包含了典型的XML中常見的各種元素:XML宣告、XML根節點、XML節點、XML屬性、XML集合。除XML宣告外,在.NET中都有對應的特性用於定義這些元素。這些特性包括:XmlRootAttribute、XmlTypeAttribute、XmlElementAttribute、XmlAttributeAttribute、XmlArrayAttribute和XmlArrayItemAttribute。另外,還有兩個常用的特性,XmlIgnoreAttribute用於標記在物件序列化時需要被忽略的部分,XmlIncludeAttribute用於標記在生成XML Schema時需要包括的型別。

   如果沒有顯式地標記任何特性,那麼預設類的特性為XmlTypeAttribute、類成員的特性為XmlElementAttribute,且名稱為類或類成員的名稱。例如:
PublicClass Order
        
Public ID AsString
        
Public OrderDate AsString
   
End Class

  如果不做任何特性標記,使用下面的程式碼序列化時:
Dim o AsNew Order
        
With o
            .ID 
=123456
            .OrderDate 
=Date.Now.ToShortDateString
        
EndWith

        
Dim writer AsNew XmlTextWriter("abc.xml
", Encoding.UTF8)
        
Dim serializer AsNew XmlSerializer(GetType(Order))

        writer.Formatting 
= Formatting.Indented
        serializer.Serialize(writer, o)

  序列化後的XML為:
<?xml version="1.0" encoding="utf-8"?>
<Order xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  
<ID>123456</ID>
  
<OrderDate>2005-4-11</OrderDate>
</Order>
  可以看到,<Order>對應Order類,而<ID>和<OrderDate>分別對應Order類中的欄位ID和OrderDate。另外,多了一個XML宣告和兩個XML名稱空間。
  XML宣告是.NET自動新增的,但是encoding是在XmlTextWriter中指定的,如果不指定encoding,那麼XML宣告只有<?xml version="1.0"?>。我使用的是.NET 1.1,這個版本中只支援XML 1.0版本。另外,如果不指定encoding,那麼預設的編碼可能也是UTF8(沒找到相關的資料)。
  .NET預設為Order類添加了XMLSchema和XMLSchema-instance兩個W3C的名稱空間。該名稱空間也可以自己指定,方法是使用XmlSerializer的另一個Serialize方法。
Dim ns AsNew XmlSerializerNamespaces
            ns.Add(
"""")

            writer.Formatting 
= Formatting.Indented
            serializer.Serialize(writer, o, ns)

  要將類序列化為XML節點:
<XmlType("order")> _
    
PublicClass Order
        ‘ any code here.
    
End Class

  要將類序列化為XML根節點: <XmlRoot("order")> _
    
PublicClass OrderClass Order
        ‘ any code here.
    
End Class

  當在類中同時使用XmlRootAttribute、XmlTypeAttribute時,序列化文件中的型別以XmlRootAttribute為準:
<XmlRoot("order"), XmlType("anotherOrderName")> _
    
PublicClass Order
        ‘ any code here.
    
End Class

  要將類成員序列化為XML節點:
<XmlAttributeAttribute("id")> _
        
Public ID AsString
  要將類成員序列化為XML屬性:
<XmlAttributeAttribute("id")> _
        
Public ID AsString
  要將類成員序列化為XML集合:
<XmlRoot("order"), XmlType("anotherOrderName")> _
    
PublicClass Order
        
<XmlAttributeAttribute("id")> _
        
Public ID AsString
        
Public orderDate AsString
        
<XmlArray("items"), XmlArrayItem("item", Type:=GetType(OrderItem))> _
        
Public Items AsNew ArrayList
    
End Class


    
<XmlType("orderItem")> _
    
PublicClass OrderItem
        
Public Name AsString
    
End Class

  使用特性的一個好處是:可以在程式碼和序列化的文件中使用不同的編碼規範。 
 

相關推薦

物件序列使用System.Xml.Serialization名稱空間

        要使用.NET進行物件的序列化,必須在解決方案中新增System.Xml的引用,並且在類檔案中引入System.Xml.Serialization名稱空間。這樣就可以在檔案中使用序列化所需要的各種特性了。 Imports System.Xml.Seriali

SQL Server基礎(八) VS2015 連線資料庫——中級篇System.Data.SqlClient名稱空間每個類的使用方法。

一、簡介        連線資料庫,需要用到常用的幾個資料類。上一篇部落格介紹了資料的基礎入門,但沒有詳細解釋每個物件類的使用方法。 原 SQL Server基礎(七) VS2015 連線資料庫——基礎入門篇:主要分為配置並載入App.con

面向物件簡答題方法過載和方法重寫覆蓋的區別?

方法過載和方法重寫(覆蓋)的區別? 答: (1)相同點: ①方法名稱相同。 ②都屬於多型機制。 (2)不同點:位置、引數列表、許可權修飾符、返回值型別、丟擲異常不同。 過載(overload):發生在同一個類中,方法名相同,引數列表不

C++繼承公有,私有,保護

情況 pre mes 派生類 它的 保持 ++ col ble 公有繼承(public)、私有繼承(private)、保護繼承(protected)是常用的三種繼承方式。 1. 公有繼承(public) 公有繼承的特點是基類的公有成員和保護成員作為派生類的成員時,它們都保持

<正則吃餃子> 關於Java的native方法

any 所有 接口 當我 article 正是 str 直接 空間 感謝作者的分享,原文地址:http://blog.csdn.net/wike163/article/details/6635321 一. 什麽是Native Method 簡單地講,一個Native

Yarn vs npm你需要知道的一切

評論 工具 ati blank 官方 發生 發布 generate issue 轉載:https://zhuanlan.zhihu.com/p/23493436 原文鏈接:Yarn vs npm: Everything You Need to Know Facebook、G

大型網站架構系列20本技術書籍推薦

學習是技術人員成長的基礎,本次分享20本技術方面的書籍,這些書不是每一本都是經典,但是每一本都有其特點。以下20本大部分本人都看過,因此推薦給大家。(本次推薦的20本只是一個參考,比如像Head First,Java程式設計思想等經典書籍是大家都知道,因此不在推薦之列) 本次分享大綱 大型網站架構系

JVM虛擬機選項Xms Xmx PermSize MaxPermSize區別

生產 申請 java ane 獨立 use 我們 也會 交換 java雖然是自動回收內存,但是應用程序,尤其服務器程序最好根據業務情況指明內存分配限制。否則可能導致應用程序宕掉。舉例說明含義:-Xms128m表示JVM Heap(堆內存)最小尺寸128MB,初始分配-Xmx

php中名稱空間namespace的作用和使用

1.名稱空間的作用: 在PHP中函式、類、常量是不允許同名的。為了解決這三者的同名問題,所以出現了名稱空間. 其實不僅僅是php,其他語言也有類似的使用。比如JavaScript中: 我們來詳細的講解一下PHP中的名稱空間: 語法:namespace 空間名\空間名;

巢狀名稱空間C#

帶有using的部分說明吧。   正文 名稱空間可以被巢狀,即可以在一個名稱空間內定義另一個名稱空間。 語法: namespace namespace_name1 {    // 程式碼宣告    namespace namesp

名稱空間C++

在C++中,名稱可以是變數、函式、結構、列舉、類以及類和結構的成員。當隨著專案的增大,名稱相互衝突的可能性也增加。使用多個廠商的類庫時,可能導致名稱衝突。例如,兩個庫可能都定義了名為List、Tree和Node的類,但定義的方式不相容。使用者可能希望使用一個庫的

阮一峰網頁效能管理詳解

你遇到過效能很差的網頁嗎?   這種網頁響應非常緩慢,佔用大量的 CPU 和記憶體,瀏覽起來常常有卡頓,頁面的動畫效果也不流暢。   你會有什麼反應?我猜想,大多數使用者會關閉這個頁面,改為訪問其他網站。作為一個開發者,肯定不願意看到這種情況,怎樣才能提高效能呢?   本文將詳細介紹效能問題的出現原

翻譯libevent參考手冊第四章與事件一起工作 (六)

libevent的基本操作單元是事件。每個事件代表一組條件的集合,這些條件包括:v 檔案描述符已經就緒,可以讀取或者寫入v 檔案描述符變為就緒狀態,可以讀取或者寫入(僅對於邊沿觸發IO)v 超時事件v 發生某訊號v 使用者觸發事件所有事件具有相似的生命週期。呼叫libevent函式設定事件並且關聯到event

翻譯libevent參考手冊第八章evbuffer緩衝IO實用功能 (十)

{    /* Let's look at the first two chunks of buf, and write them to stderr. */int n, i;    struct evbuffer_iovec v[2];    n = evbuffer_peek(buf, -1, NULL,

騰訊雲安全移動 APP 安全行業報告

移動 APP 已逐步滲透入我們的生活,據統計,2016年,APP 發行數量僅電商、金融、遊戲這三大類共計高達2萬左右,國內移動網際網路活躍使用者數已經突破10億,移動網際網路這樣快速的推移,移動網際網路的安全問題更為嚴峻,基於騰訊雲樂固和騰訊平臺的大資料分析, 整個移動應

HBase學習筆記——名稱空間namespace

在關係資料庫系統中,名稱空間namespace指的是一個表的邏輯分組,同一組中的表有類似的用途。 名稱空間的概念為即將到來的多租戶特性打下基礎: 配額管理(Quota Management (HBASE-8410)):限制一個namespace可以使用的資

Read-only file system錯誤的解決辦法

今天在公司釋出新版本時,釋出指令碼突然報Read-only file system的錯誤,之前一直還用的好好的…登入到遠端伺服器上,發現只要涉及到修改/儲存條目等需要寫磁碟操作的命令都無法使用(如tar、cp、mv、rm、chmod、chown、wget下載等指令),總是

Python中的變數作用域與名稱空間LEGB

Python 使⽤LEGB的順序來查詢⼀個符號對應的物件locals    ->   enclosing    function    ->   globals    ->    builtins區域性變數———閉包空間———全域性變數———內建模組a =

HTML5技術之影象處理一個滑動的拼圖遊戲

HTML5技術之影象處理:一個滑動的拼圖遊戲 HTML5有許多功能特性可以把多媒體整合到網頁中。使用canvas元素可以在這個空白的畫板上填充線條,載入圖片檔案,甚至動畫效果。 在這篇文章中,我將做一個滑動拼圖的遊戲用來展示HTML5 canvas的圖片處理能力。 在網頁

未來電視張建華微信為內容提供商提供發展空間

騰訊科技訊 11月18日訊息,正在廣州舉行的“‘微信•公眾’合作伙伴溝通大會”上,CNTV未來電視終端技術部總監張建華表示,微信將人和手機變成不可分割的整體,在這種狀況下,內容提供商將有更多發展的想象空間。 網際網路電視將突破IPTV的地域性,張建華認為,未來電視這