序列化到底是神马?

2023-11-21 18:10
文章标签 到底 序列化 神马

本文主要是介绍序列化到底是神马?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 简明扼要版:

Serialization is the process of converting unordered data (such as an object) into a series of tokens 。(stackoverflow)

序列化一词的本意就是将数据排列成一系列series)的原子性小词(token),以便存储和传输。

 

复杂饶舌版:

serialization is the process of translating data structures or object state into a format that can be stored (for example, in a file or memory buffer, or transmitted across a network connection link) and resurrected later in the same or another computer environment。(wiki)

序列化就是指将数据结构或对象转化为一种可以被存储(比如说,在文本、内存或通过网络链接传输)的格式,并且可以在相同或另一台电脑的环境中复原的过程。

 

补充:在计算机术语中,marshalling(配置整齐)/unmarshalling,deflating(紧缩)/inflating也是指相同的意思。

 

 

C#中的实践:

BinaryFormatter是用于将对象序列化到输出流。一般就是将对象存储在磁盘上。

这个流中存储了该对象的精确的二进制副本。

Person p = new Person();
p.Id = "123";
p.Name = "Benjamin";FileStream stream = new FileStream("D:\\person.bin", FileMode.Create, FileAccess.Write, FileShare.None);
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, p);
stream.Close();

 

SoapFormatter则是是序列化为Soap格式。

Person p = new Person();
p.Id = "123";
p.Name = "Benjamin";     
FileStream stream = new FileStream("C:\\person.txt", FileMode.Create, FileAccess.Write,FileShare.None);
SoapFormatter formatter = new SoapFormatter();
formatter.Serialize(stream, p);
stream.Close();

打开person.txt,结果是一个符合SOAP协议的文件:

 

 

 

XmlSerializer则是序列化为Xml格式:

Person p = new Person();
p.Id = "123";
p.Name = "Benjiamin";
FileStream stream = new FileStream("C:\\person.xml", FileMode.Create, FileAccess.Write,
FileShare.None);
XmlSerializer xmlserializer = new XmlSerializer(typeof(Person));
xmlserializer.Serialize(stream, p);
stream.Close();

打开person.txt,结果是一个符合XML文档格式的文件:

 

 

而现在经常是使用 json作为文件传输格式,因此最常用的是以下方法:

NewtonSoft.Json dll的序列化和反序列化

 string s1 = JsonConvert.SerializeObject(p);  
Person p1 = JsonConvert.DeserializeObject<Person>(s1);

以及.net自带的JavaScriptSerializer:

 string s2 = new JavaScriptSerializer().Serialize(p);Person p2= new JavaScriptSerializer().Deserialize<Person>(s2);

 

在javascript中常用Json2.js中的方法:

  var person = new Object();person.Id = "112233";person.Name = "Benjamin";
 var personStr = JSON.stringify(person); //序列化var person = JSON.parse(personStr);//反序列化

以及一个jQuery中不常用的:

$("form").serialize() //将一个表单内有name属性且选中的元素序列化为形如single=Single2&multiple=Multiple&check=check2 的字符串

 

转载于:https://www.cnblogs.com/Benjamin/p/3414782.html

这篇关于序列化到底是神马?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/404123

相关文章

Java中JSON格式反序列化为Map且保证存取顺序一致的问题

《Java中JSON格式反序列化为Map且保证存取顺序一致的问题》:本文主要介绍Java中JSON格式反序列化为Map且保证存取顺序一致的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未... 目录背景问题解决方法总结背景做项目涉及两个微服务之间传数据时,需要提供方将Map类型的数据序列化为co

RedisTemplate默认序列化方式显示中文乱码的解决

《RedisTemplate默认序列化方式显示中文乱码的解决》本文主要介绍了SpringDataRedis默认使用JdkSerializationRedisSerializer导致数据乱码,文中通过示... 目录1. 问题原因2. 解决方案3. 配置类示例4. 配置说明5. 使用示例6. 验证存储结果7.

SpringBoot实现Kafka动态反序列化的完整代码

《SpringBoot实现Kafka动态反序列化的完整代码》在分布式系统中,Kafka作为高吞吐量的消息队列,常常需要处理来自不同主题(Topic)的异构数据,不同的业务场景可能要求对同一消费者组内的... 目录引言一、问题背景1.1 动态反序列化的需求1.2 常见问题二、动态反序列化的核心方案2.1 ht

SpringBoot项目中Redis存储Session对象序列化处理

《SpringBoot项目中Redis存储Session对象序列化处理》在SpringBoot项目中使用Redis存储Session时,对象的序列化和反序列化是关键步骤,下面我们就来讲讲如何在Spri... 目录一、为什么需要序列化处理二、Spring Boot 集成 Redis 存储 Session2.1

Java controller接口出入参时间序列化转换操作方法(两种)

《Javacontroller接口出入参时间序列化转换操作方法(两种)》:本文主要介绍Javacontroller接口出入参时间序列化转换操作方法,本文给大家列举两种简单方法,感兴趣的朋友一起看... 目录方式一、使用注解方式二、统一配置场景:在controller编写的接口,在前后端交互过程中一般都会涉及

C++如何通过Qt反射机制实现数据类序列化

《C++如何通过Qt反射机制实现数据类序列化》在C++工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作,所以本文就来聊聊C++如何通过Qt反射机制实现数据类序列化吧... 目录设计预期设计思路代码实现使用方法在 C++ 工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作。由于数据类

一文带你搞懂Python中__init__.py到底是什么

《一文带你搞懂Python中__init__.py到底是什么》朋友们,今天我们来聊聊Python里一个低调却至关重要的文件——__init__.py,有些人可能听说过它是“包的标志”,也有人觉得它“没... 目录先搞懂 python 模块(module)Python 包(package)是啥?那么 __in

如何配置Spring Boot中的Jackson序列化

《如何配置SpringBoot中的Jackson序列化》在开发基于SpringBoot的应用程序时,Jackson是默认的JSON序列化和反序列化工具,本文将详细介绍如何在SpringBoot中配置... 目录配置Spring Boot中的Jackson序列化1. 为什么需要自定义Jackson配置?2.

Django序列化中SerializerMethodField的使用详解

《Django序列化中SerializerMethodField的使用详解》:本文主要介绍Django序列化中SerializerMethodField的使用,具有很好的参考价值,希望对大家有所帮... 目录SerializerMethodField的基本概念使用SerializerMethodField的

Jackson库进行JSON 序列化时遇到了无限递归(Infinite Recursion)的问题及解决方案

《Jackson库进行JSON序列化时遇到了无限递归(InfiniteRecursion)的问题及解决方案》使用Jackson库进行JSON序列化时遇到了无限递归(InfiniteRecursi... 目录解决方案‌1. 使用 @jsonIgnore 忽略一个方向的引用2. 使用 @JsonManagedR