序列化到底是神马?

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字符串反序列化(动态泛型)

《Java中JSON字符串反序列化(动态泛型)》文章讨论了在定时任务中使用反射调用目标对象时处理动态参数的问题,通过将方法参数存储为JSON字符串并进行反序列化,可以实现动态调用,然而,这种方式容易导... 需求:定时任务扫描,反射调用目标对象,但是,方法的传参不是固定的。方案一:将方法参数存成jsON字

【H2O2|全栈】Markdown | Md 笔记到底如何使用?【前端 · HTML前置知识】

Markdown的一些杂谈 目录 Markdown的一些杂谈 前言 准备工作 认识.Md文件 为什么使用Md? 怎么使用Md? ​编辑 怎么看别人给我的Md文件? Md文件命令 切换模式 粗体、倾斜、下划线、删除线和荧光标记 分级标题 水平线 引用 无序和有序列表 ​编辑 任务清单 插入链接和图片 内嵌代码和代码块 表格 公式 其他 源代码 预

Python---文件IO流及对象序列化

文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 前文模块中提到加密模块,本文将终点介绍加密模块和文件流。 一、文件流和IO流概述         在Python中,IO流是用于输入和输出数据的通道。它可以用于读取输入数据或将数据写入输出目标。IO流可以是标准输入/输出流(stdin和stdout),也可以是文件流,网络流等。

jquery 表单序列化

jQuery序列化表单的方法总结 现在这里贴出案例中静态的html网页内容: <!DOCTYPE html><html lang="zh"><head><meta charset="UTF-8"><title>Title</title><script src="../js/jquery-3.2.1.js"></script></head><body><form method="post"

Java反序列化漏洞-TemplatesImpl利用链分析

文章目录 一、前言二、正文1. 寻找利用链2. 构造POC2.1 生成字节码2.2 加载字节码1)getTransletInstance2)defineTransletClasses 2.3 创建实例 3. 完整POC 三、参考文章 一、前言 java.lang.ClassLoader#defineClass defineClass可以加载字节码,但由于defineClas

Spring之——整合Redis序列化方式StringRedisSerializer、FastJsonRedisSerializer和KryoRedisSerializer

当我们的数据存储到Redis的时候,我们的键(key)和值(value)都是通过Spring提供的Serializer序列化到数据库的。RedisTemplate默认使用的是JdkSerializationRedisSerializer,StringRedisTemplate默认使用的是StringRedisSerializer。 Spring Data JPA为我们提供了下面的Serializ

使用 `readResolve` 防止序列化破坏单例模式

单例模式是一种设计模式,其目的是确保一个类只有一个实例,并提供一个全局访问点。在 Java 中,我们常常通过私有化构造方法和提供静态访问方法来实现单例。然而,尽管这些手段可以有效防止类的实例化,反射和序列化依然能够破坏单例模式的唯一性。本文将重点讲解序列化如何破坏单例模式,以及如何通过 readResolve 方法来防止这种破坏。 1. 序列化和反序列化 序列化 是指将对象的状态转换为字节

Linux block_device gendisk和hd_struct到底是个啥关系

本文的源码版本是Linux 5.15版本,有图有真相: 1.先从块设备驱动说起 安卓平台有一个非常典型和重要的块设备驱动:zram,我们来看一下zram这个块设备驱动加载初始化和swapon的逻辑,完整梳理完这个逻辑将对Linux块设备驱动模型有深入的理解。 zram驱动加载的时候会调用zram_add函数,源码如下: 1887/*1888 * Allocate and initia

MVVM到底是什么

MVVM到底是什么 文章目录 MVVM到底是什么一、MVVM是什么二、为什么这么定义1. 分离关注点2. 提高可维护性3. 数据绑定和事件驱动4. 支持前端框架的发展 三、底层逻辑1. ViewModel层2. 数据绑定3. 事件驱动4. 响应式系统 四、扩展与高级技巧1. 组件化开发2. 双向数据绑定3. 计算属性和侦听器4. 插槽

我们在学习Spark的时候,到底在学习什么?

我必须要说,Spark这个框架出现之前,我对很多大数据领域的框架源码甚至都是嗤之以鼻的。 很多小伙伴在群里或者私信留言问我关于Spark的学习路径问题。 Spark发展至今,应该说已经非常成熟了。是大数据计算领域不得不学习的框架。尤其是Spark在稳定性和社区发展的成熟度方面,基本可以吊打其他的大数据处理框架。 我之前发过一篇关于阅读Spark源码的文章:《Spark源码阅读的正确打开方式》