.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# WebApi 异常处理解决方案

    下面是关于C# WebApi异常处理的完整攻略: 1. 异常分类 程序完成预期业务逻辑,但无法继续执行下去,抛出了异常,如空引用异常、下标越界异常等。 业务逻辑处理不符合预期或不符合要求,可以抛出自定义异常。 2. 异常处理方案 通过自定义过滤器来实现统一的异常处理。 2.1 自定义Exception类 首先定义一个自定义的异常类,需要继承自Exceptio…

    C# 2023年5月14日
    00
  • C#中DateTime日期类型格式化显示方法汇总

    C#中DateTime日期类型格式化显示方法汇总 在C#中,DateTime是表示日期和时间的结构体。我们经常需要输出符合我们要求的日期和时间的格式来方便输出和理解。下面是一些DateTime的格式化输出方法: 标准格式字符串 格式字符串 描述 d 短日期格式,例如 2022/3/17 D 长日期格式,例如 2022年3月17日 t 短时间格式,例如 下午 …

    C# 2023年5月31日
    00
  • ASP.NET Core MVC中Tag Helpers用法介绍

    ASP.NET Core MVC中Tag Helpers用法介绍 什么是Tag Helpers? Tag Helpers是ASP.NET Core MVC中一种新的标记语言,它可以让开发人员以更加直观、HTML标签化的方式为视图提供数据和行为。通过使用Tag Helpers,开发人员可以生成更清晰、更易于维护的视图,同时还可以更轻松地扩展ASP.NET Co…

    C# 2023年6月3日
    00
  • ExceptionLess的安装、配置、使用教程

    ExceptionLess的安装、配置、使用教程 ExceptionLess是一种流行的错误日志记录和分析工具,可以帮助开发人员快速识别和解决应用程序中的错误。在本攻略中,我们将深入讲解如何安装、配置和使用ExceptionLess,并提供两个示例说明。 安装ExceptionLess 在使用ExceptionLess之前,我们需要安装ExceptionLe…

    C# 2023年5月17日
    00
  • 如何使用正则表达式判断邮箱(以C#为例)

    正则表达式是一种强大的匹配工具,在C#中使用正则表达式可以很方便地判断邮件地址的有效性。下面是判断邮箱的完整攻略: 正则表达式的语法 要想使用正则表达式来判断邮箱,需要掌握基本的正则表达式语法。以下是一些常用的正则表达式符号: ^ : 匹配字符串的开始位置。 $ : 匹配字符串的结束位置。 [] : 匹配方括号中出现的任意一个字符。 * : 匹配前面的字符零…

    C# 2023年6月3日
    00
  • C#实现时间戳的简单方法

    关于“C#实现时间戳的简单方法”,下面是完整的攻略: 什么是时间戳 时间戳是一种表示某个时间点的数字形式。它通常是一个长整型数值,表示某个固定时间点(如1970年1月1日00:00:00)到现在经过的毫秒数或者秒数,是一种比较方便的时间表示方式,被广泛应用于网络通讯和数据存储操作中。 实现时间戳的方法 在C#中,我们可以通过内置的DateTime类来表示日期…

    C# 2023年6月1日
    00
  • 学会使用C#异常

    当我们在编写 C# 程序时,难免会发生错误。这时候,我们需要使用异常处理,来提示程序出现错误。本文将介绍如何学会使用 C# 异常,包括如何定义和处理异常。 异常介绍 异常可以是程序运行过程中的错误、意外情况以及未处理的情况。在 C# 中,异常类继承自 System.Exception 类,程序在发生异常时会自动生成一个异常对象。 异常的分类 C# 中的异常可…

    C# 2023年5月15日
    00
  • Bin 和 App_Code 文件夹介绍

    首先,在ASP.NET的网站解决方案中,Bin和App_Code文件夹都是非常重要的文件夹,它们在网站的应用程序编译和代码管理中起到了非常重要的作用。下面我们来看一下这两个文件夹的介绍及其用途。 Bin文件夹介绍: Bin文件夹是ASP.NET网站应用程序中的一个特殊目录,其中存放了所有编译后的程序集,这些程序集会被加载到ASP.NET应用程序的AppDom…

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