c语言编程笔录

首页 >   > 笔记大全

笔记大全

C中序列化的使用总结

更新时间:2023-09-30

什么是序列化?

序列化是指将.NET对象转换为字节流的过程,以便其在网络或存储介质上传输或保存。反序列化则是将序列化后的字节流转换为对象的过程。 在C#中,序列化是一个重要的概念,因为它允许我们将对象转换为可传输且易于存储和重建的格式。这是因为对象序列化和反序列化使我们能够跨不同平台和技术栈传输数据。 .NET框架提供了几种序列化机制,包括二进制,XML和JSON格式。


using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

[Serializable]
public class Person
{
    public string Name;
    public int Age;
}

public class Example
{
    public static void Main()
    {
        Person p = new Person
        {
            Name = "John Doe",
            Age = 42
        };

        BinaryFormatter formatter = new BinaryFormatter();
        MemoryStream stream = new MemoryStream();

        formatter.Serialize(stream, p);
        stream.Position = 0;

        Person p2 = (Person) formatter.Deserialize(stream);

        Console.WriteLine($"Name: {p2.Name}, Age: {p2.Age}");
    }
}

XML格式的序列化

XML序列化和反序列化在.NET中比较流行,因为XML是一种通用的数据交换格式。使用XML格式的序列化可以使得我们创建人类可读和人类可编辑的数据文件,在网络上与其他应用程序共享数据。在.NET中执行XML序列化和反序列化需要确保任何需要序列化的对象和属性等都是公共的和可访问的。也就是说,它们必须是公共的。


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

[Serializable]
public class Person
{
    public string Name;
    public int Age;
}

public class Example
{
    public static void Main()
    {
        Person p = new Person
        {
            Name = "John Doe",
            Age = 42
        };

        XmlSerializer serializer = new XmlSerializer(typeof(Person));

        using (TextWriter writer = new StreamWriter("person.xml"))
        {
            serializer.Serialize(writer, p);
        }

        using (TextReader reader = new StreamReader("person.xml"))
        {
            Person p2 = (Person) serializer.Deserialize(reader);
            Console.WriteLine($"Name: {p2.Name}, Age: {p2.Age}");
        }
    }
}

JSON格式的序列化

JSON格式的序列化和反序列化在.NET中也很常见。JSON是一种轻量级的数据交换格式,在Web应用程序与后端服务器之间进行数据交互方面非常流行。 .NET框架中的JavaScriptSerializer类可以用来将.NET对象序列化为JSON格式,反之亦然。


using System;
using System.IO;
using System.Web.Script.Serialization;

[Serializable]
public class Person
{
    public string Name;
    public int Age;
}

public class Example
{
    public static void Main()
    {
        Person p = new Person
        {
            Name = "John Doe",
            Age = 42
        };

        JavaScriptSerializer serializer = new JavaScriptSerializer();

        string json = serializer.Serialize(p);

        Person p2 = serializer.Deserialize<Person>(json);

        Console.WriteLine($"Name: {p2.Name}, Age: {p2.Age}");
    }
}

总结

C#中的序列化和反序列化机制使得我们能够跨平台和技术栈传输数据。这种操作非常重要,因为不同的系统使用不同的数据格式和传输方式。我们现在了解了二进制,XML和JSON格式的序列化,任何类型的序列化都需要确保对象和属性等都是公共和可访问的。序列化还能够很好地处理嵌套类型和集合类型等复杂的 .NET 数据结构。需要注意的是,当使用反序列化将数据重建为对象时,它不会调用构造函数。