.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#调用usb摄像头的实现方法

    下面是详细的攻略: 准备工作 电脑需要安装相关的摄像头驱动程序。 了解 C# 操作 USB 设备的基础知识。 实现方法 导入 System.Management 和 System.Text.RegularExpressions 两个命名空间。 using System.Management; using System.Text.RegularExpressi…

    C# 2023年6月3日
    00
  • C#事务处理(Execute Transaction)实例解析

    C#事务处理(Execute Transaction)实例解析 在C#开发中,事务处理常常用于保证数据库操作的原子性,确认一组操作要么全部成功,要么全部不成功。在本文中,我们将通过实例解析的方式来详细讲解C#事务处理的使用方法。 什么是事务处理? 在数据库操作中,事务处理是一种将多个操作作为一个不可分割的操作序列执行的机制。当多个操作被包含在一个事务中时,这…

    C# 2023年5月31日
    00
  • c#批量抓取免费代理并且验证有效性的实战教程

    C#批量抓取免费代理并且验证有效性的实战教程 代理服务器可以帮助我们解决一些访问问题,如境外IP访问等。但是,免费代理服务器资源不稳定,稳定的需要付费购买。本教程主要介绍如何使用C#语言进行批量抓取免费代理,并且验证代理有效性。 1. 获取免费代理网站 在开始之前,需要选择一个可靠的免费代理网站。以西刺代理网站为例,网址为:https://www.xicid…

    C# 2023年5月15日
    00
  • C#浮点数的表示和基本运算

    C#浮点数是计算机中用于存储非整数数字的数据类型。浮点数的表示与整数不同,因为它需要存储两个部分的信息:一个是数值本身,另一个是小数点的位置。在C#中,浮点数有两种类型:float和double。float占用4个字节,double占用8个字节。 浮点数的表示 在C#中,浮点数的表示采用IEEE 754标准。该标准将浮点数表示为一个符号(正/负)、一个尾数(…

    C# 2023年6月7日
    00
  • C# Linq的Select()方法 – 将序列中的每个元素投影到新形式中

    C# Linq中的Select()是一个用于在查询中选择特定数据,提取它们并创建新的数据结构的方法。该方法可以将集合、列表、数组等多种数据类型中的数据进行选择、投影、转换和过滤,在实际应用中非常实用。下面是详细讲解C#Linq的Select()的完整攻略: 一、Select()简介 Select()方法是Linq中最常用的方法之一,用于对序列中的每个元素应用…

    C# 2023年4月19日
    00
  • C# 判断字符为空的6种方法的效率实测对比

    我来详细讲解“C# 判断字符为空的6种方法的效率实测对比”的完整攻略。 1. 引言 在C#编程中,判断字符是否为空是一项非常基础的操作。为了提高代码效率,我们需要选择最合适的方法。本文从六种不同的判断字符为空的方式进行效率实测,以便找到一种最优解。 2. 方法介绍 以下是六种不同的判断字符为空的方式: 2.1 判断字符串是否为空或null if (strin…

    C# 2023年6月1日
    00
  • 深入Unix时间戳与C# DateTime时间类型互换的详解

    下面我将详细讲解“深入Unix时间戳与C# DateTime时间类型互换的详解”这一主题。 1. Unix时间戳 Unix时间戳是记录时间的一种方式,它指的是从1970年1月1日00:00:00以来经过的秒数。在Unix系统中,时间戳被广泛使用,它只表示时间大小,并不涉及时区等信息。 1.1 将Unix时间戳转换为C# DateTime类型 在C#中,我们可…

    C# 2023年6月1日
    00
  • asp.net(c#)判断远程图片是否存在

    当我们在使用asp.net(c#)获取远程图片时,我们需要先判断该图片是否存在。为了判断图片是否存在,我们可以使用HTTP协议的HEAD请求方法。HEAD请求方法会返回HTTP头信息,但不会返回HTTP body信息。如果返回状态码为200,说明该图片存在;如果返回状态码为404,说明该图片不存在。 下面是使用C#代码判断远程图片是否存在的完整攻略: 步骤一…

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