.net 序列化反序列化
.net 序列化创建对象的深拷贝
public static object DeepClone(object original)
{
using (MemoryStream stream = new MemoryStream())
{
//构造序列化格式化器来执行所有实习工作
BinaryFormatter formatter = new BinaryFormatter();
//流上下文
formatter.Context = new StreamingContext(StreamingContextStates.Clone); //将对象图序列化到内存流中
formatter.Serialize(stream, original); //反序列化前,定位到内存流的起始位置
stream.Position = ; //将对象图反序列化成一组新对象
//向调用者返回对象(深拷贝)的根
return formatter.Deserialize(stream); }
}
序列化可以将多个对象图序列化到一个流中, 在反序列化时按顺序取出即可。
控制序列化反序列化:
有时我们希望类型中有些属性或者字段不被序列化:通过
NonSerialized特性来控制:
[NonSerialized]
private double m_area;
OnDeserialized特性:
根据字段值初始化 ,可以将序列化后的值正确的设置。
格式化器如何序列化类型实例:
自动序列化
1. 调用 FormatterServices的GetSerializableMembers方法。这个方法利用反射获取类型的public 和private实例字段(标记了NonSerializedAttribute特性的字段除外)
。方法返回由MemberInfo对象构成的数组。
2. 对象被序列化。
3. 格式化器将程序集标示和类型的完整名称写入流。
4. 格式化器遍历两个数组中的元素,将每个成员的名称和值写入流。
自动反序列化
1. 格式化器从流中读取数据程序集标示和完整名称,如果当前程序集没有加载到AppDomain中,就加载它。如果程序集不能加载就会抛异常。
2. 格式化器调用FormatterServices的静态方法GetUninitializedObject:
3. 格式化器构造一个并初始化一个MemberInfo数组。
4. 格式化器根据流中包含的数据创建并初始化一个Object数组。
5. 分配对象。
控制序列化反序列化的数据:
通过ISerialiazble接口对 序列化对象 进行完全控制。 如果实现了这个接口,序列化时就会忽略所有定制特性。
.net 序列化反序列化的更多相关文章
- php json与xml序列化/反序列化
在web开发中对象的序列化与反序列化经常使用,比较主流的有json格式与xml格式的序列化与反序列化,今天想写个jsop的小demo,结果发现不会使用php序列化,查了一下资料,做个笔记 简单数组js ...
- 序列化反序列化api(入门级)
定义: java序列化是指把Java对象转换为字节序列的过程:而Java反序列化是指把字节序列恢复为Java对象的过程. 为什么字符串通常也会进行序列化? 对象需要进行序列化的原因:保证对象的状态不变 ...
- python_way ,day5 模块,模块3 ,双层装饰器,字符串格式化,生成器,递归,模块倒入,第三方模块倒入,序列化反序列化,日志处理
python_way.day5 1.模块3 time,datetime, json,pickle 2.双层装饰器 3.字符串格式化 4.生成器 5.递归 6.模块倒入 7.第三方模块倒入 8.序列化反 ...
- C#之你懂得的序列化/反序列化
前言:写此文章一方面是为了巩固对序列化的认识,另一方面是因为本人最近在面试,面试中被问到“为什么要序列化”.虽然一直在使用,自己也反复的提到序列化,可至于说为什么要序列化,还真的没想过,所以本文就这样 ...
- springboot学习(三)——http序列化/反序列化之HttpMessageConverter
以下内容,如有问题,烦请指出,谢谢! 上一篇说掉了点内容,这里补上,那就是springmvc的http的序列化/反序列化,这里简单说下如何在springboot中使用这个功能. 使用过原生netty ...
- java序列化反序列化深入探究
When---什么时候需要序列化和反序列化: 简单的写一个hello world程序,用不到序列化和反序列化.写一个排序算法也用不到序列化和反序列化.但是当你想要将一个对象进行持久化写入文件,或者你想 ...
- java序列化反序列化深入探究(转)
When---什么时候需要序列化和反序列化: 简单的写一个hello world程序,用不到序列化和反序列化.写一个排序算法也用不到序列化和反序列化.但是当你想要将一个对象进行持久化写入文件,或者你想 ...
- C# XML序列化/反序列化参考
.NET提供了很不错的XML序列化/反序列化器,(它们所在的命名空间为System.Xml.Serialization)这是很方便的,下面对它的使用做一些总结,以供参考. 1,简单序列化 public ...
- 二进制数据的序列化反序列化和Json的序列化反序列化的重要区别
前言:最近一个一个很奇怪的问题,很明白的说,就是没看懂,参照下面的代码: /// <summary> /// 反序列化对象 /// </summary> /// <typ ...
- 序列化 反序列化 MessagePack for C#
阅读目录 快速序列化组件MessagePack介绍 简介 使用 快速开始 分析器 内置的支持类型 对象序列化 DataContract兼容性 序列化不可变对象(序列化构造器) 序列化回调 Union ...
随机推荐
- 了解zookeeper
ZooKeeper操作和维护多个小型的数据节点,这些节点被称为znode,采用类似于文件系统的层级树状结构进行管理.图2-1描述了一个znode树的结构,根节点包含4个个节点,其中三个子节点拥有下一级 ...
- leetcode419
public class Solution { public int CountBattleships(char[,] board) { );//3行 );//4列 ; ; i < row; i ...
- c++builder 解压缩
c++builder 解压缩 TZCompressionStream TZDecompressionStream #include <System.ZLib.hpp> void __ ...
- ffmpeg问题汇总及解决方案 <设置avformat_open_input 超时><转>
1:如果数据是rtp/rtsp传输的话,ffmpeg会每隔30s(哪里设置该值?)发送一个keepalive包,如果ipc支持GET_PARAMETER命令,就发该命令等ipc回复以确认ipc还活着. ...
- 表单验证常用的JS正则表达式
在表单验证中,使用正则表达式来验证正确与否是一个很频繁的操作,本文收集整理了15个常用的javaScript正则表达式,其中包括用户名.密码强度.整数.数字.电子邮件地址(Email).手机号码.身份 ...
- 使用RampTexture来控制diffuse shading
[RampTexture] RampTexture(渐变纹理),可以是1D/2D纹理. This allows you to accentuate the surface's colors to fa ...
- Hadoop2.2.0安装配置手册
第一部分 Hadoop 2.2 下载 Hadoop我们从Apache官方网站直接下载最新版本Hadoop2.2.官方目前是提供了linux32位系统可执行文件,所以如果需要在64位系统上部署则需要单独 ...
- 高性能Web服务器Nginx的配置与部署研究(5)Nginx配置符号
1. 容量符号 k 千字节 K 千字节 m 兆字节 M 兆字节 2. 时间符号 ms 毫秒 s 秒 m 分 h 时 d 日 w 周 M 月(按照30天计算) y 年(按照365天计算) 3. 示例 1 ...
- Maven01 环境准备、maven项目结构、编译/测试/打包/清除、安装、
0 前提准备 0.1 安装java开发环境 0.2 安装maven工具 1 maven项目基本结构 如图所示,整个maven项目有业务文件.测试文件.POM依赖管理文件:其实还有一个资源文件resou ...
- 14-python登入教务网(python+bs4)
用request先得到到session对象,用其去放送请求,会自动保存cookie. 模拟有验证码的登入步骤: 1.发送请求登入页面: 2.分析验证码的地址,以及要将登入请求发往的地址(可以先输入错的 ...