.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#实现向函数传递不定参数的方法

    在C#中,可以通过定义可变长度参数列表的语法来实现向函数传递不定参数的方法。这个语法是通过在函数参数列表的最后一个参数前添加“params”关键字来实现的。 具体实现步骤如下: 定义函数时,在函数的参数列表中定义一个参数类型为可变长度参数数组的参数,关键字为“params”,并定义一个参数名。 例如: public static void PrintList…

    C# 2023年6月1日
    00
  • C#中实现登录功能的完整步骤

    下面我会详细讲解在C#中实现登录功能的完整步骤。 一、准备工作 1.设计数据库 首先我们需要设计一个数据库,用于存储用户信息,包括用户名和密码等。可以设计一个类似下面的用户表: CREATE TABLE [dbo].[tb_User]( [UserID] [int] IDENTITY(1,1) NOT NULL, [UserName] [nvarchar](…

    C# 2023年5月15日
    00
  • ASP.NET(C#)验证数字的两种方法

    下面将详细讲解“ASP.NET(C#)验证数字的两种方法”的完整攻略。 标题 方法一:使用TryParse函数 TryParse函数是.NET框架提供的一个很常用的函数,能够尝试将一个字符串转换为其它类型的数据,若转换成功则返回true并输出结果,否则返回false。 string inputStr = "123"; int n; boo…

    C# 2023年6月7日
    00
  • c#字符串去掉空格的二种方法(去掉两端空格)

    当我们用C#编写程序时,经常需要对字符串进行处理,比如去掉字符串两端的空格。下面分别介绍两种方法: 方法一:使用Trim()函数 C#的String类内置了Trim()函数,可以用来去掉字符串两端的空格。使用方法非常简单,只需要在需要处理的字符串后面添加.Trim()即可。 string str = " Hello World! "; s…

    C# 2023年6月8日
    00
  • C#使用private font改变PDF文件的字体详解

    下面是 “C#使用private font改变PDF文件的字体详解” 的完整攻略。 什么是Private Font Private Font是一种自定义字体,可以正常安装和使用,但在未安装该字体的计算机上会出现显示问题。因此我们需要在程序中安装该字体,在PDF文件中使用该字体。 安装Private Font 首先在项目目录下新建一个名为“Fonts”的文件夹…

    C# 2023年6月3日
    00
  • 如何运行编译.NetCore的源码?

    作为.net的开发人员,为了能更好的code,我们要知其然并知其所以然,了解.netcore的源码是我们的基本素养✊ 源码地址 .NET Platform (github.com) 这个是.net在github上开源的源码地址aspnetcore 这个是.netcore的源码地址runtime 这个是运行时的源码地址,有些.netcore源码会依赖此运行时(…

    C# 2023年4月24日
    00
  • C#使用FileStream对象读写文件

    C#使用FileStream对象读写文件 什么是FileStream对象? FileStream对象是用于在Windows操作系统上读写文件的类。通过该对象,我们可以方便地读取文件或将数据写入文件。 读取文件 使用FileStream构造函数打开文件 使用FileStream读取文件,需要在代码中使用FileStream类,可以使用FileStream构造函…

    C# 2023年6月1日
    00
  • c#语言程序构建基块

    下面是关于C#语言程序构建基块的详细讲解攻略。 1. 前置知识 在学习C#语言程序构建基块之前,需要先掌握以下基础知识: C#语言基础语法 常用数据类型和变量定义 控制流语句和循环语句 函数和方法 面向对象编程基础概念 如果你还没有掌握以上基础知识,建议先学习C#语言基础课程。 2. 程序构建基块 程序构建基块,也称为程序库,是指封装了特定功能的代码模块,可…

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