当前位置:编程学习 > XML/UML >>

通过XmlSerializer读写XML文件

首先创建一个Windows Phone 7项目,然后在MainPage.xaml.cs(或其他页面文件)中引入命名空间:

?1234 using

System.Xml;using

System.Xml.Serialization;using

System.IO.IsolatedStorage;using

System.IO;

提示:你需要在项目中添加System.Xml.Serialization引用。

对于很多应用,向隔离存储空间读写XML文件是很常见的任务。

一般情况下我们使用类IsolatedStorageFileStream进行读、写、创建文件等操作。与使用XmlWriter不同的是,XmlSerializer使我们更方便的在Object和XML文档之间进行序列化与反序列化转换。

本篇中我们将使用如下的Person类来生成XML文件结构:

?123456789101112131415161718192021222324 public

class
Person{    string

firstname;    string

lastname;    int

age;      public

string
FirstName    {        get

{ return

firstname; }        set

{ firstname = value; }    }      public

string
LastName    {        get

{ return

lastname; }        set

{ lastname = value; }    }      public

int
Age    {        get

{ return

age; }        set

{ age = value; }    }}

将要被序列化的数据对象:

?12345678 private

List<Person> GeneratePersonData(){    List<Person>
 data = new

List<Person>();    data.Add(new

Person() { FirstName = "Kate",
 LastName = "Brown",
 Age = 25 });    data.Add(new

Person() { FirstName = "Tom",
 LastName = "Stone",
 Age = 63 });    data.Add(new

Person() { FirstName = "Michael",
 LastName = "Liberty",
 Age = 37 });    return

data;}

使用XmlSerializer 保存XML文件到隔离存储空间
示例中创建了一个名为People.xml的XML文件并写入数据。

?123456789101112131415 //
 Write to the Isolated StorageXmlWriterSettings
 xmlWriterSettings = new

XmlWriterSettings();xmlWriterSettings.Indent
 = true;  using

(IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication()){    using

(IsolatedStorageFileStream stream = myIsolatedStorage.OpenFile("People.xml",
 FileMode.Create))    {        XmlSerializer
 serializer = new

XmlSerializer(typeof(List<Person>));        using

(XmlWriter xmlWriter = XmlWriter.Create(stream, xmlWriterSettings))        {            serializer.Serialize(xmlWriter,
 GeneratePersonData());        }    }}

提示:创建文件使用FileMode.Create,写入内容使用FileAccess.Write。FileAccess的成员共有Read、Write、ReadWrite三种。

使用XmlSerializer从隔离存储空间中读取XML文件
示例中打开了一个已存在的文件People.xml并读取它的内容。然后把数据显示在一个ListBox上。

?12345678910111213141516 try{    using

(IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())    {        using(IsolatedStorageFileStream
 stream = myIsolatedStorage.OpenFile("People.xml",
 FileMode.Open))        {            XmlSerializer
 serializer = new

XmlSerializer(typeof(List<Person>));            List<Person>
 data = (List<Person>)serializer.Deserialize(stream);            this.listBox.ItemsSource
 = data;        }    }}catch{    //add
 some code here}

提示:打开已存在文件使用FileMode.Open,读取内容使用FileAccess.Read。

?1234567891011 <ListBox

x:Name="listBox">    <ListBox.ItemTemplate>        <DataTemplate>            <StackPanel

Margin="10"

>                <TextBlock

Text="{Binding
 FirstName}"/>                <TextBlock

Text="{Binding
 LastName}"/>                <TextBlock

Text="{Binding
 Age}"/>            </StackPanel>        </DataTemplate>    </ListBox.ItemTemplate></ListBox>

提示:当进行文件操作的时候始终使用using关键字,using结束后会隐式调用Disposable方法,清理非托管资源。

 

摘自 xiechengfa的专栏
补充:Web开发 , 其他 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,