.net的序列化与反序列化实例

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

序列化(Serialization)指将对象转化为可以存储或传输的格式的过程。在此过程中,对象中的属性值被提取并打包为一组二进制数据,可以被序列化为XML、JSON、二进制等格式。在.NET中,序列化包含了 Binary serialization,XML serialization和 JSON serialization几种方式。

反序列化(Deserialization) 将序列化后的数据还原为原始对象。 转换对象的数据类型,让电脑理解这些二进制,比如:将网络传输过来的数据转换成可以操作的对象

. 在.NET中进行二进制序列化与反序列化

二进制序列化(Serialization)是将.NET中的数据类型序列化为二进制流,方便在网络上传输或者保存到磁盘文件之中。 序列化的实现,需要使用.NET框架中提供的 BinaryFormatter,代码实现如下:

[Serializable]
public class Student {
    public string Name { get; set; }
    public int Age { get; set; }
}
var john = new Student { Name = "John Doe", Age = 18 };
using (var stream = new MemoryStream()) {
    var formatter = new BinaryFormatter();
    formatter.Serialize(stream, john);
    byte[] serialized = stream.ToArray();
}

反序列化(Deserialization)即是将二进制流反序列化成具体的数据类型。 也需要使用.NET内置的BinaryFormatter,代码如下:

using (var stream = new MemoryStream(serialized)) {
    var formatter = new BinaryFormatter();
    var deserialized = (Student)formatter.Deserialize(stream);
}

以上就是一个完整的序列化和反序列化示例,包括对象类型的定义、序列化过程和反序列化过程。这两个过程的代码需要在同一个工程中编写。

. 在.NET中进行XML序列化与反序列化

XML序列化(Serialization)用于将.NET中的对象序列化为XML格式,XML作为一种通用的数据交换格式,可以快速实现不同平台、不同编程语言之间的数据交换。 在.NET中,使用XmlSerializer类来实现对象到XML的序列化。示例如下:

public class Student {
    public string Name { get; set; }
    public int Age { get; set; }
}
var john = new Student { Name = "John Doe", Age = 18 };
var serializer = new XmlSerializer(typeof(Student));
using (var writer = new StringWriter(new StringBuilder())) {
    serializer.Serialize(writer, john);
    string xml = writer.ToString();
}

XML序列化后的结果如下:

<?xml version="1.0" encoding="utf-16"?>
<Student xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Name>John Doe</Name>
  <Age>18</Age>
</Student>

XML中含有额外的元数据,包括XML声明和根元素。而使用XmlSerializer时可以通过指定XmlSerializer构造函数的第二个参数XmlSerializerNamespaces的实例,以移除额外的元素。

var serializer = new XmlSerializer(typeof(Student));
var namespaces = new XmlSerializerNamespaces(new XmlQualifiedName[] { new XmlQualifiedName("", "") });
using (var writer = new StringWriter(new StringBuilder())) {
    serializer.Serialize(writer, john, namespaces);
    string xml = writer.ToString();
}

反序列化(Deserialization)需要使用XmlSerializer类的Deserialize方法,示例如下:

using (var reader = new StringReader(xml)) {
    var serializer = new XmlSerializer(typeof(Student));
    var deserialized = (Student)serializer.Deserialize(reader);
}

以上就是一个完整的XML序列化和反序列化示例。

总结:
从以上两个示例可以看出,使用不同的序列化类型,序列化的数据格式也不同,二者作用及使用场景都不一样,需要根据需求选择合适的序列化类型。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:.net的序列化与反序列化实例 - Python技术站

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

相关文章

  • c# 怎样简洁高效的实现多个 Enum 自由转换

    C#怎样简洁高效的实现多个Enum自由转换 在C#中,Enum是一种常用的数据类型,它可以用于定义一组常量。在实际开发中,我们经常需要将不同的Enum类型进行转换,以便在不同的上下文中使用。本文将介绍如何使用C#实现多个Enum自由转换,并提供两个示例来演示如何使用这些技术。 示例1:使用扩展方法实现Enum转换 以下是使用扩展方法实现Enum转换的步骤: …

    C# 2023年5月15日
    00
  • 在C#里面给PPT文档添加注释的实现代码

    在C#中通过对PowerPoint对象模型的操作,可以实现在PPT文档中添加注释的功能。下面是具体的步骤: 1. 引用PowerPoint对象模型 首先需要引用PowerPoint对象模型,方法如下: using Microsoft.Office.Interop.PowerPoint; 2. 创建PowerPoint文档对象并打开文件 使用下面的代码可以创建…

    C# 2023年6月6日
    00
  • C#实现表格数据转实体的示例代码

    我将为您详细讲解如何用C#实现表格数据转实体,并提供两条示例说明。 什么是表格数据转实体? 表格数据转实体,顾名思义就是将表格中的数据转换为实体类对象。这种转换方式比较适用于需要将表格数据转换为代码中可操作的数据类型,例如将Excel中读取的数据转换为C#中的类对象,方便进一步运算和处理数据。 下面介绍两种实现表格数据转实体的方法: 方法一:使用CSVHel…

    C# 2023年6月1日
    00
  • C#微信开发之自定义菜单管理

    C#微信开发之自定义菜单管理 简介 自定义菜单是公众号开发中最基本的功能之一,通过自定义菜单可以为用户提供更便捷的交互方式。本文将详细讲解使用C#开发微信自定义菜单的流程和方法。 准备工作 使用C#开发微信自定义菜单需要先完成以下准备工作: 成为微信公众号的开发者,开通公众号的开发权限。 在微信公众平台申请获得appid和appsecret两个关键信息。 在…

    C# 2023年5月31日
    00
  • C# DriveInfo.GetDrives – 获取所有的磁盘驱动器信息

    DriveInfo.GetDrives 方法是C#中 System.IO 命名空间中的一个方法,用于获取系统中所有的驱动器信息。其返回一个 DriveInfo 类型的数组,数组中包含了当前计算机中所有已存在的逻辑驱动器的信息,如磁盘的名称、大小、是否为只读等。 DriveInfo.GetDrives 方法的语法如下: public static DriveI…

    C# 2023年4月19日
    00
  • C#实现简单的双色球抽取中奖号码代码

    要实现简单的双色球抽取中奖号码代码,需要掌握以下的知识点: C#的随机数生成 数组的定义和使用 控制语句(如if语句、for循环等) 字符串的操作 接下来,我将一步步为你详细讲解如何用C#实现简单的双色球抽取中奖号码的代码。 步骤一:定义红球和蓝球的范围 双色球包含1-33个红球和1-16个蓝球。我们需要定义这两个范围。 int redMax = 33; i…

    C# 2023年5月31日
    00
  • 利用多线程句柄设置鼠标忙碌状态的实现方法

    实现鼠标忙碌状态的方法一般有两种,分别是使用win32api的SetCursor和自定义控件来实现。使用多线程句柄设置鼠标忙碌状态需要采用自定义控件的方法,因为SetCursor属于UI线程接口,不能在多线程中直接调用。 以下是实现方法的完整攻略: 创建自定义控件 首先需要创建一个自定义控件来替代系统的鼠标指针。这个自定义控件可以是一个静态图片,也可以是一个…

    C# 2023年6月7日
    00
  • VS2015中C#版本6.0的新特性 你需要知道

    VS2015 中 C# 版本 6.0 的新特性 简介 C# 6.0 是一种微软为.NET Framework所开发的编程语言,是.NET开发领域的主流语言之一,在 VS2015 中提供了许多新的语言特性,包括NULL条件运算符、字符串插值、表达式体成员等。本文将会详细介绍 VS2015 中C# 6.0 的新特性。 NULL 条件运算符 NULL 条件运算符是…

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