C#使用BinaryFormatter类、ISerializable接口、XmlSerializer类进行序列化和反序列化

序列化是将对象转换为一种格式,以便在需要时可以将其反序列化为原始对象。C#中使用以下三种方式进行序列化和反序列化:

  1. BinaryFormatter类:将对象序列化为二进制格式,是.NET中最常用的序列化方式,可以将序列化后的数据存储到磁盘、内存或网络中。

  2. XmlSerializer类:将对象序列化为XML格式,适合在不同平台间传输数据。

  3. ISerializable接口:通过实现ISerializable接口,在序列化和反序列化过程中,控制对象的序列化行为。

以下是使用上述三种方式进行序列化和反序列化的示例:

BinaryFormatter类示例:

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

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

class Program
{
    static void Main(string[] args)
    {
        Person person = new Person();
        person.Name = "Tom";
        person.Age = 20;

        //序列化
        BinaryFormatter formatter = new BinaryFormatter();
        MemoryStream stream = new MemoryStream();
        formatter.Serialize(stream, person);
        byte[] data = stream.ToArray();

        //反序列化
        stream = new MemoryStream(data);
        person = formatter.Deserialize(stream) as Person;
        Console.WriteLine($"Name:{person.Name} Age:{person.Age}");
    }
}

XmlSerializer类示例:

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

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

class Program
{
    static void Main(string[] args)
    {
        Person person = new Person();
        person.Name = "Tom";
        person.Age = 20;

        //序列化
        XmlSerializer serializer = new XmlSerializer(typeof(Person));
        StringWriter writer = new StringWriter();
        serializer.Serialize(writer, person);
        string xml = writer.ToString();

        //反序列化
        StringReader reader = new StringReader(xml);
        person = serializer.Deserialize(reader) as Person;
        Console.WriteLine($"Name:{person.Name} Age:{person.Age}");
    }
}

ISerializable接口示例:

using System;
using System.IO;
using System.Runtime.Serialization;

[Serializable]
class Person : ISerializable
{
    public string Name { get; set; }
    public int Age { get; set; }

    public Person() { }

    public Person(SerializationInfo info, StreamingContext context)
    {
        Name = info.GetString("Name");
        Age = info.GetInt32("Age");
    }

    public void GetObjectData(SerializationInfo info, StreamingContext context)
    {
        info.AddValue("Name", Name);
        info.AddValue("Age", Age);
    }
}

class Program
{
    static void Main(string[] args)
    {
        Person person = new Person();
        person.Name = "Tom";
        person.Age = 20;

        //序列化
        MemoryStream stream = new MemoryStream();
        BinaryFormatter formatter = new BinaryFormatter();
        formatter.Serialize(stream, person);
        byte[] data = stream.ToArray();

        //反序列化
        stream = new MemoryStream(data);
        person = formatter.Deserialize(stream) as Person;
        Console.WriteLine($"Name:{person.Name} Age:{person.Age}");
    }
}

上述三种示例均展示了对象序列化和反序列化的基本操作,并对这三种方式进行了比较。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#使用BinaryFormatter类、ISerializable接口、XmlSerializer类进行序列化和反序列化 - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • C#中FormsAuthentication用法实例

    下面是关于“C#中FormsAuthentication用法实例”的完整攻略。 一、什么是FormsAuthentication FormsAuthentication 是 ASP.NET 提供的一种 Forms 身份验证机制,它使用基于 Cookie 的认证方式来验证用户身份。 在使用 FormsAuthentication 时我们需要进行以下几步: 创建…

    C# 2023年6月1日
    00
  • C#几种获取网页源文件代码的实例

    C#几种获取网页源文件代码的实例 1. 使用 WebClient 获取 首先,引入命名空间 System.Net: using System.Net; 然后只需要使用 WebClient 类即可获取网页源文件: string url = "https://www.example.com"; using (WebClient client …

    C# 2023年6月1日
    00
  • C#.NET采用HTML模板发送电子邮件完整实例

    下面是 C#.NET 采用 HTML 模板发送电子邮件的完整攻略: 第一步:添加命名空间和引用 在 C# 代码中,我们需要引用 System.Net.Mail 命名空间来发送电子邮件。因此,在代码文件的头部需要添加以下引用语句: using System.Net.Mail; 第二步:构建邮件内容 首先,我们需要准备好邮件的内容。在这里,我们将采用 HTML …

    C# 2023年5月31日
    00
  • c#中值类型和引用类型的基础教程

    下面是关于“c#中值类型和引用类型的基础教程”的完整攻略: 概述 在C#中,变量可以分为两种类型:值类型和引用类型。这两种类型在内存中有不同的处理方式,因此在使用时需注意它们之间的差异。 值类型 值类型的变量直接存储其值,这意味着它们被存储在程序的栈中。栈内存是一种自动分配和释放的内存,通常用于存储函数参数和局部变量等短期数据。 C#中有多种内置的值类型,如…

    C# 2023年6月1日
    00
  • C#装箱和拆箱操作实例分析

    C#装箱和拆箱操作实例分析 装箱(Boxing) 装箱指的是将值类型转换为对象类型,即将一个值类型的数据放到一个堆分配的对象中。我们知道,值类型的数据是直接存储在内存栈空间中的,而对象类型的数据则是存储在堆空间中的。因此,当我们需要将一个值类型作为对象类型来处理时,就需要进行装箱操作。 下面是一个装箱操作的示例: int i = 123; object ob…

    C# 2023年6月7日
    00
  • 通过C#实现自动售货机接口

    通过C#实现自动售货机接口的完整攻略如下: 一、了解接口 在开始编写自动售货机接口之前,需要先了解什么是接口。接口(Interface)是一种抽象的类型,它定义了让其他程序集(Assembly)访问该程序集的功能。通过接口,可以使一个类实现多个不相关的类型。 二、创建项目 打开Visual Studio,创建一个新的C#控制台应用程序项目; 在解决方案资源管…

    C# 2023年6月1日
    00
  • C# 构造函数如何调用虚方法

    C# 的构造函数是用来初始化一个新对象的方法。而虚方法是在基类中声明,可在派生类中重写的方法。构造函数中调用虚方法可能会出现一些问题,因为构造函数的存在,意味着对象的未完成状态,它需要特别注意调用虚方法的顺序和可能的结果。下面我将详细讲解C# 构造函数如何调用虚方法的攻略。 1.如何在构造函数中调用虚方法 为了在构造函数中调用虚方法,我们需要按照以下步骤操作…

    C# 2023年6月6日
    00
  • C# 实现窗口无边框,可拖动效果

    下面我为你详细讲解实现C#窗口无边框、可拖动效果的完整攻略。具体步骤如下: 步骤一:关闭窗口边框 为了实现窗口无边框效果,需要先关闭窗口的边框。在C#中,我们可以通过窗口的FormBorderStyle属性来实现此功能,具体方式如下: this.FormBorderStyle = FormBorderStyle.None; 步骤二:设置窗口背景透明 由于我们…

    C# 2023年6月7日
    00
合作推广
合作推广
分享本页
返回顶部