c#序列化详解示例

C#序列化详解示例

本文将详细介绍C#中的序列化操作,并提供了两个示例,帮助读者更加深入地理解序列化的概念和操作方法。

什么是序列化

序列化是将一个对象转换成字节流的过程,通常用于在网络上或本地存储中传输或保存数据。在C#中,使用类库中的System.Runtime.Serialization命名空间中的类来实现序列化与反序列化操作。

如何序列化一个对象

步骤1:创建需要序列化的类

首先需要创建一个需要进行序列化的类,例如以下示例:

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

可以看到这个Person类声明了[Serializable]特性,这表示该类可以进行序列化操作。

步骤2:创建序列化对象

使用BinaryFormatter类来创建序列化对象,代码如下:

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

BinaryFormatter formatter = new BinaryFormatter();

步骤3:序列化对象

使用Serialize方法将对象序列化成字节流,代码如下:

Person p = new Person() { Name = "张三", Age = 20 };
using (FileStream fs = new FileStream("person.dat", FileMode.Create))
{
    formatter.Serialize(fs, p);
}

这个例子中将Person对象序列化成person.dat文件。

如何反序列化一个对象

步骤1:创建需要反序列化的类

首先需要创建一个需要进行反序列化的类,例如以下示例:

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

可以看到这个Person类同样声明了[Serializable]特性,这表示该类可以进行序列化操作。

步骤2:创建反序列化对象

使用BinaryFormatter类来创建反序列化对象,代码如下:

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

BinaryFormatter formatter = new BinaryFormatter();

步骤3:反序列化对象

使用Deserialize方法将字节流反序列化成对象,代码如下:

using (FileStream fs = new FileStream("person.dat", FileMode.Open))
{
    Person p = (Person)formatter.Deserialize(fs);
    Console.WriteLine($"Name:{p.Name} Age:{p.Age}");
}

这个例子中将person.dat文件反序列化成Person对象,并输出NameAge属性。

示例1:将对象序列化到内存中

下面示例将Person对象序列化成字节数组,然后反序列化回对象:

Person p = new Person() { Name = "李四", Age = 25 };
MemoryStream ms = new MemoryStream();
formatter.Serialize(ms, p);
ms.Position = 0;
Person p2 = (Person)formatter.Deserialize(ms);
Console.WriteLine($"Name:{p2.Name} Age:{p2.Age}");

这个例子中,使用MemoryStream类来将序列化后的Person对象保存到内存中,并通过Position属性将MemoryStream重置到起始位置,然后反序列化得到Person对象。

示例2:序列化与远程调用

下面示例将Person对象序列化成字节数组,并通过远程调用传递该字节数组:

Person p = new Person() { Name = "王五", Age = 30 };
using (MemoryStream ms = new MemoryStream())
{
    formatter.Serialize(ms, p);
    ms.Position = 0;
    byte[] buffer = ms.ToArray();
    // 远程调用
    RemoteCall(buffer);
}

这个例子中,通过将序列化后的Person对象保存到字节数组中,可以方便地通过远程调用传递该对象。RemoteCall方法是用于模拟远程调用的一个示例,其代码如下:

void RemoteCall(byte[] buffer){
    using (MemoryStream ms = new MemoryStream(buffer))
    {
        Person p = (Person)formatter.Deserialize(ms);
        Console.WriteLine($"Name:{p.Name} Age:{p.Age}");
    }
}

通过反序列化传递过来的字节数组,可以得到原始的Person对象。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c#序列化详解示例 - Python技术站

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

相关文章

  • LINQ基础之From和GroupBy子句

    下面给出详细的 “LINQ基础之From和GroupBy子句” 的攻略: From子句 from 子句用来指定数据源和创建一个范围变量,它负责查询和返回一个序列。 下面是一个示例,通过使用 from 子句从一个整数数组中选择所有大于 5 的数字: int[] numbers = { 2, 3, 5, 7, 11, 13 }; var result = fro…

    C# 2023年6月1日
    00
  • C# 基础编程题集锦

    简单字符串加密 编写一个应用程序用来输入的字符串进行加密,对于字母字符串加密规则如下:’a→d’ ‘b’→’e’ ‘w’→z’ …… x’→’a’ ‘y’→b’ ‘z→c’ ‘A’→’D’ ‘B’→’E’ ‘W’→’Z’ ‘X’→’A’ ‘Y’→’B’ ‘Z’→’C’ ?对于其他字符,不进行加密。 static void Main(string[] …

    C# 2023年5月6日
    00
  • asp.net生成静态页并分页+ubb第1/2页

    下面是详细讲解“asp.net生成静态页并分页+ubb第1/2页”的完整攻略: 一、准备工作 首先,在项目中添加一个类,用于生成静态页和分页。 然后,通过NuGet安装Markdig包,用于将UBB代码转换为HTML格式。 接下来,设置web.config文件,开启压缩和缓存页面。 二、生成静态页 在类中创建一个名为GenStaticPage的方法,用于生成…

    C# 2023年5月31日
    00
  • C#事件(event)使用方法详解

    C#事件(event)使用方法详解 在C#语言中,事件(event)是一种能够向外界传递消息并触发特定操作的机制。本文将详细讲解C#事件的基本概念、使用方法和注意事项等内容,帮助读者更好的掌握事件处理。 基本概念 事件是一种特殊的委托类型,它能够在对象状态发生变化时,向监听者发送信号并触发相应操作。事件通常包含以下几个要素: 事件源:触发事件的对象。 事件参…

    C# 2023年5月31日
    00
  • 对int array进行排序的实例讲解

    对int array进行排序的实例讲解 在介绍具体的对int array进行排序的实例讲解之前,我们需要先了解一下排序的概念和几种排序算法。排序是一种将数据按照某种规则进行排列的操作,常用的排序算法有冒泡排序、选择排序、插入排序、归并排序和快速排序等。 下面我们以冒泡排序和选择排序两种排序算法为例,对int array进行排序的实例进行讲解。 一、冒泡排序法…

    C# 2023年6月7日
    00
  • C# 迭代器分部类与索引器详情

    让我通过以下标题,详细讲解C#迭代器分部类与索引器的详情: 1. 迭代器分部类 1.1 什么是迭代器 在C#中,迭代器是一种用于简化类似于集合、列表、数组等序列的遍历操作的机制。使用迭代器,我们可以通过简单且易于理解的方式遍历序列,而无需考虑复杂的内部实现。 1.2 什么是迭代器分部类 迭代器分部类是一种特殊的类类型,它可以在多个文件中声明并定义,在编译时会…

    C# 2023年5月31日
    00
  • Winform控件Picture实现图片拖拽显示效果

    详细讲解Winform控件Picture实现图片拖拽显示效果的完整攻略。 1. 实现效果 我们将实现一个Winform窗体应用程序,其界面上有一个Picture控件,用户可以通过拖拽图片到Picture控件上实现图片显示。 2. 实现步骤 下面是我们实现此功能的步骤: 2.1 在窗体上添加Picture控件 在Visual Studio中创建一个Winfor…

    C# 2023年6月2日
    00
  • C#模拟Http与Https请求框架类实例

    C#模拟Http与Https请求框架类实例 如果要在C#中编写一个需要进行Http或Https请求的应用程序,可以使用.NET框架中的HTTPClient或者WebClient类实现。这些类被设计成可靠和易于使用的,同时也提供许多不同的方法来控制请求。 HTTPClient的用法 HTTPClient是一个可以发送Http请求并接收响应的类。下面是一个简单的…

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