XML序列化和反序列化

2021-09-25 23:42:11 字數 4176 閱讀 1797

在談xml序列化之前,我們先來說說序列化。

為什麼要做序列化和反序列化?

.net程式執行時,物件都駐留在記憶體中;記憶體中的物件如果需要傳遞給其他系統使用;或者在關機時需要儲存下來以便下次再次啟動程式使用就需要序列化和反序列化。

序列化名詞解釋:序列化是將物件狀態轉換為可保持或傳輸的格式的過程。

與序列化相對的是反序列化,它將流轉換為物件。這兩個過程結合起來,可以輕鬆地儲存和傳輸資料。這就是序列化的意義所在。

我們可以把物件序列化為不同的格式,比如說,json序列化、xml序列化、二進位制序列化、soap序列化等,以上這些不同的格式也都是為了適應具體的業務需求。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

xmlversion="1.0" encoding="utf-8" ?>

<baseinfo>

<person>

<name>小明

<age>16

<books>

<book>

<isbn>123

<title>借的書1

<person>

<name>小紅

<age>18

<books>

<book>

<isbn>456

<title>借的書2

<book>

<isbn>789

<title>借的書3

在這個檔案中baseinfo為該xml的跟節點,它的裡面由多個person節點組成,在person節點中又包括name、age、books節點,books節點中又由多個book組成,在book中又包括isbn和title。

下面首先我們要做的是建立與該xml相對應的物件,然後把物件轉換為上述xml(序列化),或者把上述xml轉換為物件(反序列化)。下面的例子中只是把xml存到本地,再從本地讀取出來,如果需要在網路中傳輸,應該新增serializable屬性,我們先來建立物件。

using system.xml.serialization;

public class baseinfo

set }}

使用xml序列化需要引入命名空間system.xml.serialization。我們建立的類名稱為baseinfo,這裡與xml的跟節點需要對應,當然我們也可以指定該類轉換為xml時對映成的名稱,這裡可以使用xmlroot中的elementname來指定它的名稱,就像該類中的屬性perlist那樣應用,當然你也可以使用比較省事的方法,類的名稱和xml節點的名稱相同即可,就像該例子中一樣。在baseinfo類中,我們維護了乙個perlist它是乙個person物件的集合,當然這個屬性的名稱並不與xml檔案中的對應,所以要更改它的名稱為person。

好,接下來我們看看person類:

using system.xml.serialization;

public class person

public person(string name, int age)

public string name

set

}public int age

set

}[xmlelement(elementname = "books")]

public listbooklist

set }}

在該類中有name和age,還有維護了乙個books物件。

我們再來看看books:

using system.xml.serialization;

public class books

set }}

books的作用就像是乙個過渡的類,只為了與xml中的節點books對應,在該類中維護了book類的物件集合。

那麼,最後我們來看book類:

using system.xml.serialization;

public class book

public book(string isbn, string title)

public string isbn

set

}public string title

set

}

}

好了,這樣我們需要的類也就都建立完了,雖說建立類的過程有些繁雜,但是有了這些類,我們也就不用乙個乙個處理xml的節點了。我們建立乙個簡單的控制台程式,在裡面新增兩個處理方法,第乙個是序列化方法:

public static void xmlserialize()

呼叫該方法執行效果:

第二個是反序列化方法:

public static void xmldeserialize()}}

}

呼叫該方法執行效果:

Xml序列化和反序列化

1.xmlserializer 類 該類用一種高度鬆散耦合的方式提供序列化服務。你的類不需要繼承特別的基類,而且它們也不需要實現特別的介面。相反,你只需在你的類或者這些類的公共域以及讀 寫屬性裡加上自定義的特性。xmlserializer 通過反射機制讀取這些特性並用它們將你的類和類成員對映到 xm...

XML序列化和反序列化

閱讀目錄 回到頂部 由於.net framework針對xml提供了很多api,這些api根據不同的使用場景實現了不同層次的封裝,比如,我們可以直接使用xmltextreader xmldocument xpath來取數xml中的資料,也可以使用linq to xml或者反序列化的方法從xml中讀取...

XML序列化和反序列化

不過在上篇中忘了把json序列化和反序列化的另外一種方式寫上去了,這裡做個簡單的補充 json篇 json序列化和反序列化擴充套件方法實現類 using system using system.collections.generic using system.linq using system.te...