.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#使用linq计算执行元素在列表中出现次数的方法

    下面是使用LINQ计算执行元素在列表中出现次数的方法的完整攻略。 标题 C#使用LINQ计算执行元素在列表中出现次数的方法 内容 一般来说,计算元素在列表中出现的次数是一个很常见的需求,下面我们就介绍如何使用LINQ对列表进行查询,以计算元素在列表中出现的次数。 1. 使用GroupBy方法进行分组 要计算元素在列表中出现的次数,我们可以通过先将列表按照元素…

    C# 2023年6月1日
    00
  • c#基于Win32Api实现返回Windows桌面功能

    下面我就详细讲解如何使用C#基于Win32 API实现返回Windows桌面功能。 准备工作 在开始编码之前,我们首先需要安装Visual Studio并创建一个新的C#项目。可以使用.NET Framework或.NET Core框架。在创建项目的时候,需要选择控制台应用程序模板。 导入Win32 API C#提供了P/Invoke(Platform In…

    C# 2023年5月15日
    00
  • C#使用CefSharp控件实现爬虫

    以下是详细讲解“C#使用CefSharp控件实现爬虫”的完整攻略: 1.什么是CefSharp CefSharp是一种基于Chromium Embedded Framework(CEF)的.NET开源项目,通过将Chromium增加到应用程序中,可以在WinForms和WPF应用程序中嵌入HTML内容,运行JavaScript等。它极大地提高了.NET应用程…

    C# 2023年6月7日
    00
  • C#版免费离线人脸识别之虹软ArcSoft V3.0(推荐)

    C#版免费离线人脸识别之虹软ArcSoft V3.0(推荐)是一款完全开源免费的人脸识别程序,使用者可以在本地环境下运行,不需要联网即可进行人脸识别。下面是详细的使用攻略。 1. 安装ArcSoft SDK 首先,在官网下载并安装ArcSoft SDK,根据自己的操作系统版本选择相应的SDK安装包,可以在ArcSoft官网的开发者中心下载: http://w…

    C# 2023年5月15日
    00
  • C#实现身份证号码验证的方法

    C#实现身份证号码验证的方法 在C#中,可以通过正则表达式来实现身份证号码的验证。身份证号码验证是指对一个给定的字符串进行验证,判断其是否符合身份证号码的格式规范,包括长度、组成结构、年月日以及最后一位效验码的计算等方面。 步骤 导入System.Text.RegularExpressions命名空间。 这个命名空间提供了一个Regex正则表达式类,可以用来…

    C# 2023年6月1日
    00
  • c# winform窗口一直置顶显示在桌面最上方或最底层的方法

    要让C# Winform窗口一直置顶显示在桌面的最上方或最底层需要使用其他的工具或API来实现。下面提供两种示例来解释如何实现这个功能。 方法一:使用Window API实现 可以通过调用Windows API来实现窗口置顶。具体步骤如下: 添加命名空间: using System.Runtime.InteropServices; using System.…

    C# 2023年6月7日
    00
  • C#找不到类型名”SqlConnection”的有效解决方法

    为了解决 “C#找不到类型名”SqlConnection” 的报错问题,有如下几个有效的解决方法: 1. 添加System.Data.SqlClient引用 在使用 SqlConnection 的代码文件中,我们需要添加 System.Data.SqlClient 引用,这是用于连接 SQL Server 的命名空间。 步骤如下: 打开你的项目 右键点击”引…

    C# 2023年5月15日
    00
  • ASP.NET操作EXCEL的总结篇

    下面是ASP.NET操作Excel的总结篇的完整攻略。 1. 准备工作 在ASP.NET中操作Excel文件需要安装Microsoft Office或Open Office软件,也可以使用第三方开源控件。具体步骤如下: 安装Microsoft Office或Open Office软件,这里以安装Microsoft Office为例; 在Visual Stud…

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