关于#c##的问题:数据序列化
在 C# 中,数据序列化是将对象转换为可以在网络上传输或存储在持久化介质(如文件或数据库)中的格式,以及将其反序列化回对象的过程。C# 提供了多种方式来实现数据序列化,其中两个主要的方法是使用内置的 BinaryFormatter
和 DataContractSerializer
。
使用 BinaryFormatter 进行数据序列化和反序列化:
序列化对象到文件:
csharpusing System; using System.IO; using System.Runtime.Serialization.Formatters.Binary; [Serializable] public class Person { public string Name { get; set; } public int Age { get; set; } } class Program { static void Main(string[] args) { Person person = new Person { Name = "Alice", Age = 30 }; BinaryFormatter formatter = new BinaryFormatter(); using (FileStream stream = new FileStream("person.dat", FileMode.Create)) { formatter.Serialize(stream, person); } Console.WriteLine("Person object serialized."); } }
- 在上述代码中,
BinaryFormatter
将Person
对象序列化为二进制数据并写入文件 "person.dat"。
- 在上述代码中,
从文件中反序列化对象:
csharpstatic void Main(string[] args) { BinaryFormatter formatter = new BinaryFormatter(); using (FileStream stream = new FileStream("person.dat", FileMode.Open)) { Person person = (Person)formatter.Deserialize(stream); Console.WriteLine($"Deserialized Person: Name={person.Name}, Age={person.Age}"); } }
- 上述代码从 "person.dat" 文件中读取二进制数据并将其反序列化为
Person
对象。
- 上述代码从 "person.dat" 文件中读取二进制数据并将其反序列化为
使用 DataContractSerializer 进行数据序列化和反序列化:
定义可序列化的类型:
csharpusing System; using System.Runtime.Serialization; [DataContract] public class Person { [DataMember] public string Name { get; set; } [DataMember] public int Age { get; set; } }
- 使用
DataContract
和DataMember
属性标记类和属性,以便DataContractSerializer
可以序列化和反序列化这些成员。
- 使用
使用 DataContractSerializer 进行序列化和反序列化:
csharpstatic void Main(string[] args) { Person person = new Person { Name = "Bob", Age = 25 }; DataContractSerializer serializer = new DataContractSerializer(typeof(Person)); using (FileStream stream = new FileStream("person.xml", FileMode.Create)) { serializer.WriteObject(stream, person); } Console.WriteLine("Person object serialized."); using (FileStream stream = new FileStream("person.xml", FileMode.Open)) { Person deserializedPerson = (Person)serializer.ReadObject(stream); Console.WriteLine($"Deserialized Person: Name={deserializedPerson.Name}, Age={deserializedPerson.Age}"); } }
- 上述代码使用
DataContractSerializer
将Person
对象序列化为 XML 文件,并从 XML 文件中反序列化回对象。
- 上述代码使用
注意事项:
- BinaryFormatter 适合于本地数据存储,但不适合在不同平台或不同版本之间进行跨平台数据传输。
- DataContractSerializer 生成的 XML 格式可读性好,适合跨平台数据传输和持久化。
通过这些示例,可以了解如何在 C# 中利用 BinaryFormatter
和 DataContractSerializer
进行数据序列化和反序列化操作,根据具体需求选择合适的方法和格式进行处理。