【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# 序列化】开端的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-11-18微软研究:RAG系统的四个层次提升理解与回答能力
- 2024-11-15C#中怎么从PEM格式的证书中提取公钥?-icode9专业技术文章分享
- 2024-11-14云架构设计——如何用diagrams.net绘制专业的AWS架构图?
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#
- 2024-01-24Advanced .Net Debugging 1:你必须知道的调试工具