【C# 序列化】开端

2022/3/4 20:15:01

本文主要是介绍【C# 序列化】开端,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

定义

序列化是使用指定格式将活动对象或对象图转换为字节序列的过程,从而存储对象或将对象传输到内存、数据库或文件的过程。 它的主要用途是保
存对象的状态,以便能够在需要时重新创建对象。 反向过程称为“反序列化”。

对象图objectGfraph, 一个对象可以引用一个集合,而这个集合引用了一组对象,这些对象可以继续引用其他对象 ,这就形成了对象图。调用格式化器的Serialize方法时,对象图中的所有对象都被序列化到流中。

格式化器算法会确保每个对象只序列化一次。避免相互引用造成的死循环。

可以指定的格式有几十种,但最常见的两种格式是可扩展标记语言(XML)和JavaScript对象表示法(JSON)。

更优方案:JSON更紧凑,最适合Web和移动应用程序。 XML较为冗长,但在更多旧系统中得到更好的支持。 使用JSON可以最小化序列化对象图的大小。 将对象图发送到Web应用程序和移动应用程序时,JSON也是一个不错的选择,因为JSON是JavaScript的本机序列化格式,并且移动应用程序通常会在有限的带宽上进行调用,因此字节数很重要。

.NET Core具有多个类,这些类将在XML和JSON之间进行序列化。 我们将从查看XmlSerializer和JsonSerializer开始。

 

 类型以及命名空间

system [serializeable]、[Noserializeable]

 system.Runtime.serialization

[OnDeserialized]、[OnDeserializing]、[OnSerialized]、[OnSerializing]

[OptionalFiled]:指定序列化流中可能缺少某个字段,以便BinaryFormatter和SoapFormatter不会抛出异常。应用到新版本类型的新增加的字段上,当序列化格式化器看到该特性的应用与一个字段时,就不会因为流中的数据不包含这个字段而抛出异常。

序列化的工作原理

序列化的用途 JSON 序列化 二进制和 XML 序列化 序列化是指将对象转换成字节流,从而存储对象或将对象传输到内存、数据库或文件的过程。 它的主要用途是保 存对象的状态,以便能够在需要时重新创建对象。 反向过程称为“反序列化”。 下图展示了序列化的整个过程: 将对象序列化为带有数据的流。 该流还可能包含有关对象类型的信息,例如其版本、区域性和程序集名称。 可以 将此流中的对象存储在数据库、文件或内存中。

xue'lie'h

 序列化的用途

通过序列化,开发人员可以保存活动对象的状态,并能在需要时重新创建对象,同时还能存储对象和交换数据。 通过 序列化,开发人员可以执行如下操作: 使用 Web 服务将对象发送到远程应用程序 将对象从一个域传递到另一个域 将对象通过防火墙传递为 JSON 或 XML 字符串 跨应用程序维护安全或用户特定的信息

可序列化的类型

引用类型、struct、枚举、委托。枚举和委托是一定可以序列化的所有不用[serializeable]标记

Object、List<T>、HashTable、数组

继承性

[serializeable] 不会遗传到子类,如果子类标记为[serializeable],那么基类也必须标记[serializeable]。因为子类保护了父类。

公开性

序列化会将所有的数据都保存成二进制,包含阔private、readonly等。因此敏感的数据例如账号密码等字段应该设置成不可序列化[Noserializeable]。

C#常用的序列化方式

要让一个对象支持.Net序列化服务,用户必须为每一个关联的类加上[Serializable]特性。如果类中有些成员不适合参与序列化(比如:密码字段),可以在这些域前加上[NonSerialized]特性。
  C#支持三种序列化格式:二进制格式(使用BinaryFormatter序列化器)、XML格式(使用XmlSerializer序列化器)。这三种序列化器的区别如下:
  二进制格式可序列化一个类型的所有可序列化字段,不管它是公共字段还是私有字段。SOAP格式和XML格式仅能序列化公共字段或拥有公共属性的私有字段,未通过属性公开的私有字段将被忽略。
  使用二进制格式序列化时,它不仅是将对象的字段数据进行持久化,也持久化每个类型的完全限定名称和定义程序集的完整名称(包括包称、版本、公钥标记、区域性),这些数据使得在进行二进制格式反序列化时亦会进行类型检查。SOAP格式序列化通过使用XML命名空间来持久化原始程序集信息。而XML格式序列化不会保存完整的类型名称或程序集信息。这便利XML数据表现形式更有终端开放性。如果希望尽可能延伸持久化对象图的使用范围时,SOAP格式和XML格式是理想选择。
  BinaryFormatter和SoapFormatter类型通过实现IFormatter和IRemotingFormatter接口实现序列化。
  IFormatter接口定义了核心的Serialize和Deserialize方法用于序列化和反序列化。
  IRemotingFormatter接口重载了Serialize和Deserialize方法,使风格更适合分布式持久化。



这篇关于【C# 序列化】开端的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程