推荐答案
// www.javascriptcn.com code example
using System;
using System.IO;
using System.Runtime.Serialization;
[DataContract]
public class Person
{
[DataMember]
public string Name { get; set; }
[DataMember]
public int Age { get; set; }
}
public class Program
{
public static void Main()
{
Person person = new Person { Name = "John Doe", Age = 30 };
// Serialize the object to a stream
DataContractSerializer serializer = new DataContractSerializer(typeof(Person));
using (FileStream stream = new FileStream("person.xml", FileMode.Create))
{
serializer.WriteObject(stream, person);
}
// Deserialize the object from the stream
Person deserializedPerson;
using (FileStream stream = new FileStream("person.xml", FileMode.Open))
{
deserializedPerson = (Person)serializer.ReadObject(stream);
}
Console.WriteLine($"Name: {deserializedPerson.Name}, Age: {deserializedPerson.Age}");
}
}本题详细解读
DataContractSerializer 概述
DataContractSerializer 是 .NET 中用于序列化和反序列化对象的类。它主要用于将对象转换为 XML 格式,以便存储或传输,并且可以从 XML 格式中重新构造对象。
使用步骤
定义数据契约:使用
[DataContract]和[DataMember]属性标记类和成员。[DataContract]用于标记类,[DataMember]用于标记需要序列化的属性或字段。创建对象:实例化一个需要序列化的对象。
序列化对象:
- 创建
DataContractSerializer实例,指定要序列化的对象类型。 - 使用
WriteObject方法将对象序列化到流中(如文件流、内存流等)。
- 创建
反序列化对象:
- 使用
ReadObject方法从流中读取 XML 数据并反序列化为对象。
- 使用
代码解析
- Person 类:这是一个简单的类,包含两个属性
Name和Age,并使用[DataContract]和[DataMember]标记。 - 序列化:将
Person对象序列化为 XML 并保存到文件person.xml中。 - 反序列化:从
person.xml文件中读取 XML 数据并反序列化为Person对象。 - 输出:打印反序列化后的对象属性,验证序列化和反序列化的正确性。
注意事项
DataContractSerializer默认使用 XML 格式,但也可以通过配置使用其他格式。- 只有标记了
[DataMember]的成员才会被序列化。 - 序列化和反序列化的类型必须一致,否则会抛出异常。