📜  C#序列化(1)

📅  最后修改于: 2023-12-03 14:40:33.083000             🧑  作者: Mango

C#序列化
什么是序列化?

在计算机科学中,序列化是将对象转换为可以存储或传输的格式的过程。在C#中,序列化是指将对象转换为二进制格式或其他可读性较好的格式,以便将其保存在文件中、通过网络发送或在内存中进行持久化。

为什么需要序列化?

在编程中,我们经常需要在不同的应用程序之间传递数据。例如,当我们需要将对象从一个程序发送到另一个程序时,我们需要将对象转换为可以传输的格式,并在接收端将其还原回对象。

此外,序列化还可以用于将对象保存到磁盘以进行持久化,以便在以后的时间点可以重新加载对象。

C#中的序列化方式

C#提供了多种序列化方式,包括以下几种常见的:

1. 二进制序列化

二进制序列化是将对象转换为二进制格式的过程。在C#中,可以使用BinaryFormatter类来进行二进制序列化和反序列化。

以下是一个示例代码片段,展示了如何使用二进制序列化方式:

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; }
}

public class Program
{
    public static void Main()
    {
        // 创建一个Person对象
        Person person = new Person
        {
            Name = "John",
            Age = 30
        };

        // 将对象序列化为二进制数据
        BinaryFormatter formatter = new BinaryFormatter();
        MemoryStream stream = new MemoryStream();
        formatter.Serialize(stream, person);

        // 将二进制数据保存到文件
        File.WriteAllBytes("person.bin", stream.ToArray());

        // 从文件中读取二进制数据
        byte[] data = File.ReadAllBytes("person.bin");

        // 将二进制数据反序列化为对象
        stream = new MemoryStream(data);
        Person deserializedPerson = (Person)formatter.Deserialize(stream);

        // 打印反序列化后的对象属性
        Console.WriteLine($"Name: {deserializedPerson.Name}");
        Console.WriteLine($"Age: {deserializedPerson.Age}");
    }
}

2. XML序列化

XML序列化是将对象转换为XML格式的过程。在C#中,可以使用XmlSerializer类来进行XML序列化和反序列化。

以下是一个示例代码片段,展示了如何使用XML序列化方式:

using System;
using System.IO;
using System.Xml.Serialization;

// 定义一个可序列化的类
[Serializable]
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

public class Program
{
    public static void Main()
    {
        // 创建一个Person对象
        Person person = new Person
        {
            Name = "John",
            Age = 30
        };

        // 将对象序列化为XML数据
        XmlSerializer serializer = new XmlSerializer(typeof(Person));
        using (TextWriter writer = new StreamWriter("person.xml"))
        {
            serializer.Serialize(writer, person);
        }

        // 从XML文件中读取数据
        using (TextReader reader = new StreamReader("person.xml"))
        {
            Person deserializedPerson = (Person)serializer.Deserialize(reader);

            // 打印反序列化后的对象属性
            Console.WriteLine($"Name: {deserializedPerson.Name}");
            Console.WriteLine($"Age: {deserializedPerson.Age}");
        }
    }
}

3. JSON序列化

JSON序列化是将对象转换为JSON格式的过程。在C#中,可以使用DataContractJsonSerializer类(需引用System.Runtime.Serialization.Json)或Json.NET库来进行JSON序列化和反序列化。

以下是一个示例代码片段,展示了如何使用Json.NET库进行JSON序列化方式:

using System;
using Newtonsoft.Json;

// 定义一个可序列化的类
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

public class Program
{
    public static void Main()
    {
        // 创建一个Person对象
        Person person = new Person
        {
            Name = "John",
            Age = 30
        };

        // 将对象序列化为JSON数据
        string json = JsonConvert.SerializeObject(person);

        // 从JSON数据中反序列化为对象
        Person deserializedPerson = JsonConvert.DeserializeObject<Person>(json);

        // 打印反序列化后的对象属性
        Console.WriteLine($"Name: {deserializedPerson.Name}");
        Console.WriteLine($"Age: {deserializedPerson.Age}");
    }
}
总结

序列化是将对象转换为可存储或传输的格式的过程,在C#中有多种序列化方式可供选择,包括二进制序列化、XML序列化和JSON序列化。根据实际需求和场景的不同,选择合适的序列化方式可以提高应用程序的性能和可维护性。