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日

相关文章

  • sqlserver备份还原数据库功能封装分享

    SQLServer备份还原数据库功能封装分享 简介 SQL Server 是一款颇为流行的关系型数据库,支持备份还原功能。备份是指将数据库的全部或部分数据复制到磁盘或磁带上,还原则是将这些备份重新到数据库引擎中。 封装备份还原数据库功能意义在于:将复杂的备份还原过程简化,提高代码复用性和可维护性。 功能封装 备份数据库 — 备份数据库 CREATE PRO…

    C# 2023年6月1日
    00
  • C#下实现创建和删除目录的实例代码

    下面是详细的攻略。 1.创建目录 C#语言提供了Directory类用于操作目录。在进行目录创建前,需要确保创建目录的上层目录存在。 代码示例一 下面展示一个简单的示例,以创建名为newFolder的目录为例: using System.IO; class Program { static void Main(string[] args) { string …

    C# 2023年6月6日
    00
  • 浅谈.Net Core后端单元测试的实现

    在.Net Core后端开发中,单元测试是一种非常重要的测试方法,可以帮助我们快速发现代码中的问题,提高代码质量。本文将详细讲解.Net Core后端单元测试的实现,包括环境搭建、代码实现、示例说明等。 环境搭建 在开始实现.Net Core后端单元测试之前,我们需要先搭建好开发环境。具体来说,我们需要安装以下软件: Visual Studio 2019或更…

    C# 2023年5月16日
    00
  • C#多线程编程中的锁系统(四):自旋锁

    当多个线程需要访问共享资源时,可能会出现竞争的情况,如果不加以处理,就会出现数据不一致的问题。因此,需要使用锁来保证共享资源的访问序列化。本文将介绍自旋锁的使用和实现方式。 什么是自旋锁? 自旋锁是一种锁机制,它是基于循环检测的方法实现的。当一个线程需要访问共享资源时,如果发现锁已经被其他线程占用,它就会进入一个忙循环(自旋)中,等待锁变为可用。在“忙循环”…

    C# 2023年5月15日
    00
  • 解析asp.net的分页控件

    下面是详细的讲解“解析asp.net的分页控件”的攻略: 背景 在ASP.NET应用程序中,经常需要处理大型数据集,使其分页显示在Web页面上。ASP.NET分页控件允许您轻松地完成此任务,自动为您处理分页逻辑。 步骤 第一步:添加分页控件 在ASP.NETWeb应用的UI设计界面中,您可以从工具箱中添加控件。在此过程中,您将找到一个分页控件用于访问和操作分…

    C# 2023年6月3日
    00
  • C#的Process类调用第三方插件实现PDF文件转SWF文件

    那么关于“C#的Process类调用第三方插件实现PDF文件转SWF文件”,可以按照以下步骤来实现: 步骤一:选用PDF转SWF工具 在网上可以找到多种PDF转SWF的工具,选择一个稳定、常用的工具比较可靠。这里举例使用 SWFTools。 步骤二:安装SWFTools 下载并安装SWFTools,并确保其bin目录添加到了系统的环境变量之中,使其能够在任何…

    C# 2023年5月15日
    00
  • C#中==(双等于号)与equals()区别详解

    C#中,==(双等于号)与equals()都是比较两个对象是否相等的操作。但是它们之间存在一些区别,接下来我们来详细讲解。 ==(双等于号)的作用 在C#中,双等于号是用来比较两个变量的值是否相等的,例如: int num1 = 10; int num2 = 10; bool result1 = (num1 == num2); // true 以上代码中,我…

    C# 2023年6月7日
    00
  • C#打包应用程序,与.NETFramework介绍

    正如您所要求的,下面将详细讲解“C#打包应用程序,与.NET Framework介绍”的完整攻略。 什么是.NET Framework? .NET Framework是一个由Microsoft Corporation开发的软件框架,适用于Microsoft Windows操作系统。它提供了一组已经编译好的类库和运行时环境,用于简化C#以及其他.NET编程语言…

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