.Net中的序列化和反序列化详解

下面是“.Net中的序列化和反序列化详解”的攻略:

什么是序列化和反序列化?

序列化是指将对象转换为可存储或传输的格式,反序列化则是将这些格式转换回对象。

在 .Net 中,对象序列化通过将其转换为二进制格式或 XML 文档来实现,允许在网络上发送、保存到磁盘或在应用程序之间传递对象。

.Net 实现对象序列化和反序列化

在 .Net 中,对象序列化和反序列化都由 System.Runtime.Serialization 命名空间下的类来实现。

对象序列化

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

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

class Program
{
  static void Main(string[] args)
  {
    Person person = new Person()
    {
      Name = "Lucy",
      Age = 18
    };

    IFormatter formatter = new BinaryFormatter();
    Stream stream = new FileStream("Person.bin", FileMode.Create, FileAccess.Write, FileShare.None);
    formatter.Serialize(stream, person);
    stream.Close();

    Console.WriteLine("Person object has been serialized.");
  }
}

以上代码通过创建一个 Person 对象,使用 BinaryFormatter 对象进行序列化,并将其保存到磁盘上的文件中。注意,在 Person 类前面加上了 Serializable 属性,表示该类可以进行序列化。

对象反序列化

class Program
{
  static void Main(string[] args)
  {
    IFormatter formatter = new BinaryFormatter();
    Stream stream = new FileStream("Person.bin", FileMode.Open, FileAccess.Read, FileShare.Read);
    Person person = (Person)formatter.Deserialize(stream);
    stream.Close();

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

以上代码通过读取磁盘上的文件,并使用 BinaryFormatter 对象进行反序列化,将二进制格式转换为 Person 对象。

XML 序列化和反序列化

除了二进制格式,.Net 中还支持 XML 格式的对象序列化。

对象序列化

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

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

class Program
{
  static void Main(string[] args)
  {
    Person person = new Person()
    {
      Name = "Lucy",
      Age = 18
    };

    XmlSerializer serializer = new XmlSerializer(typeof(Person));
    Stream stream = new FileStream("Person.xml", FileMode.Create, FileAccess.Write, FileShare.None);
    serializer.Serialize(stream, person);
    stream.Close();

    Console.WriteLine("Person object has been serialized.");
  }
}

以上代码与二进制序列化的代码类似,只是使用的是 XmlSerializer 对象进行序列化。

对象反序列化

class Program
{
  static void Main(string[] args)
  {
    XmlSerializer serializer = new XmlSerializer(typeof(Person));
    Stream stream = new FileStream("Person.xml", FileMode.Open, FileAccess.Read, FileShare.Read);
    Person person = (Person)serializer.Deserialize(stream);
    stream.Close();

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

以上代码与二进制反序列化的代码类似,只是使用的是 XmlSerializer 对象进行反序列化。

总结

在 .Net 中,对象序列化和反序列化允许轻松地将对象转换为可存储或传输的格式,并将其转换回对象。这些序列化和反序列化方式包括二进制格式和 XML 格式。要进行序列化或反序列化,需要使用 System.Runtime.Serialization 命名空间下的类,如 BinaryFormatter 和 XmlSerializer。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:.Net中的序列化和反序列化详解 - Python技术站

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

相关文章

  • C#使用Word中的内置对话框实例

    下面是详细的攻略: 使用Word中的内置对话框实例 在C#中,我们可以通过调用Word的内置对话框来实现相关功能。具体步骤如下: 引入Word对象库和对话框对象库 首先我们需要在项目中引入Word对象库和对话框对象库。 using Microsoft.Office.Interop.Word; using Microsoft.Office.Core; 创建Wo…

    C# 2023年6月3日
    00
  • C#泛型集合类型实现添加和遍历

    下面是一份详细的攻略,分别讲解了C#泛型集合类型的添加和遍历。 添加元素到集合 List泛型列表 List 是 C# 中常见的泛型类型之一,其中的元素是可以重复的,可以方便的进行元素添加和删除操作。 //创建一个string类型的List泛型列表 List<string> list = new List<string>(); //使用…

    C# 2023年6月6日
    00
  • C#使用linq对数组进行筛选排序的方法

    下面是“C#使用linq对数组进行筛选排序的方法”的完整攻略。 1. 筛选数组 使用linq对数组进行筛选的方式有很多,下面介绍几种比较常用的方法。 1.1. Where 使用Where方法可以对数组进行筛选,例如筛选出数组中大于等于10的元素,可以这样写: int[] arr = { 1, 5, 8, 10, 13, 15 }; var filteredA…

    C# 2023年6月1日
    00
  • 计算器实例代码讲解C#工厂模式

    以下是关于“计算器实例代码讲解C#工厂模式”的完整攻略: 介绍 工厂模式是面向对象设计中的一种创建型方法,主要解决在不知道具体实现的情况下创建对象的问题,它提供了一个通用的接口,由子类决定实例化哪种类型。 在本文中,我们将会介绍一个使用工厂模式设计的计算器实例代码,代码使用C#语言编写,并且给出详细的注释和说明。 工厂模式的示例 在工厂模式中,我们需要有一个…

    C# 2023年5月31日
    00
  • c#(Socket)异步套接字代码示例

    让我来为您详细讲解一下“C#(Socket)异步套接字代码示例”的完整攻略。 什么是异步套接字 为了更好的理解这个示例,我们先来简单介绍一下异步套接字。 异步套接字(Asynchronous Socket)是一种非阻塞式的网络编程模型,通过异步套接字可以避免使用线程等多线程编程方式。异步套接字允许应用程序调用发送和接收函数,而不用等待这些函数完成,这样就可以…

    C# 2023年6月7日
    00
  • .Net Core日志记录之日志配置

    .NET Core日志记录之日志配置 在.NET Core中,日志记录是一项非常重要的任务,它可以帮助您更好地了解应用程序的运行情况。在本攻略中,我们将详细讲解.NET Core日志记录之日志配置,并提供两个示例说明。 步骤一:添加日志记录提供程序 在.NET Core中,您需要添加日志记录提供程序,以便记录应用程序的日志。以下是添加日志记录提供程序的示例:…

    C# 2023年5月17日
    00
  • 关于C# 类和对象详情

    关于C# 类和对象详情 类 在C#中,类是一种用于封装数据和行为的模板。它定义了一个对象的属性和方法,对象是类的实例。 声明类 定义一个类,需要使用class关键字后接类名。类名通常使用大写字母开头。 public class Person { // 属性和方法声明 } 属性 属性是类中包含的一种变量,其定义形式为访问修饰符 类型 属性名 { get; se…

    C# 2023年5月31日
    00
  • C#递归算法和排列算法

    C#递归算法和排列算法 什么是递归算法? 递归算法是一种在函数中调用自身的算法。具有以下特征:- 一个问题可以被分解成几个相同的子问题;- 分解出来的子问题和原问题的解法方式一样;- 递归算法必须要有终止条件。 递归算法在程序设计中应用非常广泛,尤其在树形数据结构的遍历、图形搜索、分治法等方面都有很好的应用。 递归算法示例 下面是一个实现阶乘计算的递归算法:…

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