关于#c##的问题:数据序列化

在 C# 中,数据序列化是将对象转换为可以在网络上传输或存储在持久化介质(如文件或数据库)中的格式,以及将其反序列化回对象的过程。C# 提供了多种方式来实现数据序列化,其中两个主要的方法是使用内置的 BinaryFormatterDataContractSerializer

使用 BinaryFormatter 进行数据序列化和反序列化:

  1. 序列化对象到文件

    csharp
    using 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."); } }
    • 在上述代码中,BinaryFormatterPerson 对象序列化为二进制数据并写入文件 "person.dat"。
  2. 从文件中反序列化对象

    csharp
    static 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 对象。

使用 DataContractSerializer 进行数据序列化和反序列化:

  1. 定义可序列化的类型

    csharp
    using System; using System.Runtime.Serialization; [DataContract] public class Person { [DataMember] public string Name { get; set; } [DataMember] public int Age { get; set; } }
    • 使用 DataContractDataMember 属性标记类和属性,以便 DataContractSerializer 可以序列化和反序列化这些成员。
  2. 使用 DataContractSerializer 进行序列化和反序列化

    csharp
    static 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}"); } }
    • 上述代码使用 DataContractSerializerPerson 对象序列化为 XML 文件,并从 XML 文件中反序列化回对象。

注意事项:

  • BinaryFormatter 适合于本地数据存储,但不适合在不同平台或不同版本之间进行跨平台数据传输。
  • DataContractSerializer 生成的 XML 格式可读性好,适合跨平台数据传输和持久化。

通过这些示例,可以了解如何在 C# 中利用 BinaryFormatterDataContractSerializer 进行数据序列化和反序列化操作,根据具体需求选择合适的方法和格式进行处理。