下面是关于C#实现对象XML序列化的方法的完整攻略:
1. 什么是XML序列化
XML序列化是将对象转化为XML文档的过程。在C#中,当我们需要将对象存储到文件或通过网络发送时,我们可以使用XML序列化将C#对象转换为XML文档,以便于存储、传输和还原。同时,XML序列化也可以将已经存在的XML文档还原为C#对象。
2. C#实现对象XML序列化的方法
C#提供了两种方式实现对象XML序列化:XmlSerializer
和DataContractSerializer
。这里我们主要介绍XmlSerializer
方式的使用。
2.1 XmlSerializer
方法的使用步骤
使用XmlSerializer
进行对象序列化和反序列化的步骤如下:
-
定义需要序列化的类:需要进行XML序列化的类,在进行XML序列化操作时需要标记为
[Serializable]
。
csharp
[Serializable]
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
} -
创建
XmlSerializer
类实例:使用XmlSerializer
进行序列化操作的第一步,是创建一个XmlSerializer
实例。
csharp
XmlSerializer xs = new XmlSerializer(typeof(Person)); -
序列化:使用
XmlSerializer.Serialize(Stream, object)
方法将Person对象转换为XML格式。
csharp
Person p = new Person { Name = "Tom", Age = 18 };
using (StreamWriter sw = new StreamWriter("Person.xml"))
{
xs.Serialize(sw, p);
} -
反序列化:使用
XmlSerializer.Deserialize(Stream)
方法将XML文档重新转化为Person对象。
csharp
using (StreamReader sr = new StreamReader("Person.xml"))
{
Person newP = (Person)xs.Deserialize(sr);
}
2.2 XmlSerializer
方法的注意事项
- 序列化过程中遇到未标记
[Serializable]
属性的类对象会抛出异常:“未将对象引用设置到对象的实例”。 - 由于XML文件需要严格遵守格式规范,所以在序列化和反序列化时需要使用StreamWriter和StreamReader等流的包装类,而不是直接使用File类读写文件。
3. 示例操作说明
我们现在已经了解了如何使用XmlSerializer
来实现对象XML序列化,下面我们使用两个简单的示例来演示其中的步骤。
3.1 示例1:序列化和反序列化Person对象
在这个例子中,我们用XmlSerializer
来将一个Person对象序列化为XML文档“Person.xml”,在反序列化时,将XML文档重新恢复成Person对象。
using System;
using System.IO;
using System.Xml.Serialization;
namespace XmlSerializeDemo
{
[Serializable]
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
class Program
{
static void Main(string[] args)
{
//创建XmlSerializer实例
XmlSerializer xs = new XmlSerializer(typeof(Person));
//序列化
Person p = new Person { Name = "Tom", Age = 18 };
using (StreamWriter sw = new StreamWriter("Person.xml"))
{
xs.Serialize(sw, p);
Console.WriteLine("序列化成功:Person.xml已经生成!");
}
//反序列化
using (StreamReader sr = new StreamReader("Person.xml"))
{
Person newP = (Person)xs.Deserialize(sr);
Console.WriteLine("反序列化成功:Name={0},Age={1}", newP.Name, newP.Age);
}
Console.ReadKey();
}
}
}
输出结果:
序列化成功:Person.xml已经生成!
反序列化成功:Name=Tom,Age=18
3.2 示例2:序列化和反序列化一个集合
在这个例子中,我们用XmlSerializer
来序列化一个List集合,将结果写入XML文件中,并在反序列化时,将XML文件中包含的数据恢复成List对象。
using System;
using System.Collections.Generic;
using System.IO;
using System.Xml.Serialization;
namespace XmlSerializeDemo
{
[Serializable]
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
class Program
{
static void Main(string[] args)
{
//创建XmlSerializer实例
XmlSerializer xs = new XmlSerializer(typeof(List<Person>));
//序列化
List<Person> personList = new List<Person>
{
new Person { Name = "Tom", Age = 18 },
new Person { Name = "Jack", Age = 19 },
new Person { Name = "Lily", Age = 20 },
};
using (StreamWriter sw = new StreamWriter("PersonList.xml"))
{
xs.Serialize(sw, personList);
Console.WriteLine("序列化成功:PersonList.xml已经生成!");
}
//反序列化
using (StreamReader sr = new StreamReader("PersonList.xml"))
{
List<Person> newPersonList = (List<Person>)xs.Deserialize(sr);
Console.WriteLine("反序列化成功:PersonList共有{0}项", newPersonList.Count);
foreach (var item in newPersonList)
{
Console.WriteLine("Name={0},Age={1}", item.Name, item.Age);
}
}
Console.ReadKey();
}
}
}
输出结果:
序列化成功:PersonList.xml已经生成!
反序列化成功:PersonList共有3项
Name=Tom,Age=18
Name=Jack,Age=19
Name=Lily,Age=20
通过以上两个例子,我们可以比较清楚地看到XmlSerializer序列化和反序列化的过程。同时,我们可以根据需要进行适当的修改,将XmlSerializer
方法应用到需要序列化的类和集合中。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#实现对象XML序列化的方法 - Python技术站