.NET Core 对象到字节数组的序列化和反序列化
.NET Core中利用MemoryStream和BinaryFormatter可以实现对象到字节数组的序列化和反序列化:
定义ObjectSerializer类,实现对象到字节数组的序列化和反序列化
using System.IO; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary;namespace Assembly {public static class ObjectSerializer{/// <summary> /// 将一个object对象序列化,返回一个byte[] /// </summary> /// <param name="obj">能序列化的对象</param> /// <returns></returns> public static byte[] ObjectToBytes(object obj){using (MemoryStream ms = new MemoryStream()){IFormatter formatter = new BinaryFormatter();formatter.Serialize(ms, obj);return ms.GetBuffer();}}/// <summary> /// 将一个序列化后的byte[]数组还原 /// </summary>/// <param name="Bytes"></param> /// <returns></returns> public static object BytesToObject(byte[] Bytes){using (MemoryStream ms = new MemoryStream(Bytes)){IFormatter formatter = new BinaryFormatter();return formatter.Deserialize(ms);}}} }
用BinaryFormatter做序列化和反序列化最大的一个问题是,序列化和反序列化的类型必须是标记为[Serializable]的,也就是SerializableAttribute特性,而且SerializableAttribute特性是无法被继承的,例如我们如果有个类People标记了[Serializable],如下所示:
using System; using System.Collections.Generic; using System.Text;namespace ConsoleApp2 {[Serializable]public class People{public string Name{get;set;}public int Age{get;set;}} }
由于People类标记了[Serializable],所以它可以被BinaryFormatter序列化和反序列化,但是假如现在还有个类Child继承People,Child类没有被标记为[Serializable],那么Child类是无法被BinaryFormatter序列化和反序列化的,因为如上所述SerializableAttribute特性是无法被继承的。
Child类如下所示:
using System; using System.Collections.Generic; using System.Text;namespace ConsoleApp2 {public class Child : People{} }
建立.NET Core控制台项目,在Main方法中运行如下代码:
class Program {static void Main(string[] args){var people = new People(){Name = "王大锤",Age = 30};var data = ObjectSerializer.ObjectToBytes(people);people = ObjectSerializer.BytesToObject(data) as People;Console.WriteLine("Press any key to end...");Console.ReadKey();} }
可以看到People类可以被成功序列化和反序列化
将Main方法的代码改为如下,再运行:
class Program {static void Main(string[] args){var child = new Child(){Name = "王大锤",Age = 30};var data = ObjectSerializer.ObjectToBytes(child);child = ObjectSerializer.BytesToObject(data) as Child;Console.WriteLine("Press any key to end...");Console.ReadKey();} }
可以看到代码在ObjectSerializer类的ObjectToBytes方法中抛出了异常,异常提示Child类没有被标记位[Serializable]
转载于:https://www.cnblogs.com/OpenCoder/p/10290379.html
.NET Core 对象到字节数组的序列化和反序列化相关推荐
- C#实现对象的Xml格式序列化及反序列化
要序列化的对象的类: [Serializable] public class Person { private string name; public string Name { get { retu ...
- Java对象的serialVersionUID在序列化和反序列化的用途
本博客主要转自如下链接 http://blog.csdn.net/javazejian/article/details/52665164 这篇文章写的不错,但是有些地方我估计博主没有亲自测试,所以有些 ...
- 传递实体类对象_Java I/O 流之对象流中的序列化和反序列化
一.概念 当两个进程远程通信时,彼此可以发送各种类型的数据. 无论是何种类型的数据,都会以二进制序列的形式在网络上传送.比如,我们可以通过 http 协议发送字符串信息:我们也可以在网络上直接发送 J ...
- java序列化和反序列化对象_java中的序列化与反序列化,还包括将多个对象序列化到一个文件中...
package Serialize; /** * Created by hu on 2015/11/7. */ //实现序列化必须实现的接口,这就是一个空接口,起到标识的作用 import java. ...
- java clone 序列化_关于Java对象深度Clone以及序列化与反序列化的使用
我们可以利用clone方法来实现对象只见的复制,但对于比较复杂的对象(比如对象中包含其他对象,其他对象又包含别的对象.....)这样我们必须进行层层深度clone,每个对象需要实现 ...
- Xson:Java对象序列化和反序列化工具
1. Xson 介绍 Xson是一个Java对象序列化和反序列化程序.支持Java对象到字节数组的序列化,和从字节数组到Java对象的反序列化. 地址:https://github.com/xso ...
- oracle存储过程如何传递一个bean对象_对象传输,序列化和反序列化
一.前言 二.基本概念 2.1 序列化和反序列化的定义及最重要的作用 序列化的定义:Java序列化就是指把Java对象转换为字节序列的过程: 反序列化的定义:Java反序列化就是指把字节序列恢复为Ja ...
- 深入分析Java的序列化与反序列化
阅读目录 Java对象的序列化 如何对Java对象进行序列化与反序列化 序列化及反序列化相关知识 ArrayList的序列化 ObjectOutputStream 总结 序列化是一种对象持久化的手段. ...
- jackson (json、xml的序列化与反序列化)
jackson用于java对象到json的序列化与反序列化.还支持xml格式. jackson用于实现json与java对象的序列与反序列化.web service要实现跨机器传送对象那么就需要有一种 ...
- java基础提升篇:深入分析Java的序列化与反序列化
初遇 序列化是一种对象持久化的手段.普遍应用在网络传输.RMI等场景中.本文通过分析ArrayList的序列化来介绍Java序列化的相关内容.主要涉及到以下几个问题: 怎么实现Java的序列化 为什么 ...
最新文章
- STM32 SPI的使用
- 使用SpringBoot的jackson包进行实体类型转换
- https跨域到http问题解决
- 利用快排查询无序数组第k位大的数
- Java Web开发小结
- traybox错误怎么办_toolbox提示错误无法使用怎么办?
- 张洁的新书「流浪的老狗」
- 查看zookeeper注册了哪些服务
- idc机房运维巡检_20年代IDC的“新十二大”基础设施系统你都了解吗?
- 斐讯N1救砖指南!值得收藏
- 百度杀毒,360安全卫士的那些私下的功夫 。
- 中标麒麟服务器性能怎么样,中标麒麟Linux系统的性能分析及工具(74页)-原创力文档...
- OPENGL OSG setNearFarRatio可以动态调节远近剪裁面
- C语言程序设计 | 大小端
- 可编辑手写PDF以图片形式转换为WORD
- SecureCRT for linux安装教学
- 树莓派64位系统bullseye如何成功安装Qt5
- 王亟亟的Python学习之路(五)-dictionary,set,函数,函数参数
- net-tools is needed by mysql-community-server-5.7.21-1.el7.x86_64
- android游戏特效,直播中送礼物短音效实现(支持网络,本地,assets)
热门文章
- 无限制翻译PDF文件——低调使用
- 2021年中国消费金融行业贷款情况及发展趋势分析:互联网消费金融放款规模达到20.2万亿[图]
- 32位计算机处理64位数据,Win7 64位/32位电脑系统支持多大内存
- 考取FRM证书的三大好处,可能你还不知道
- 2021GPLT L1-8 乘法口诀数列(JAVA语言)
- 物联网蓝牙芯片的选型
- 8b/10b编码技术系列(二):Disparity、RD、8b/10b编码
- 中国语料库研究的历史与现状-冯志伟教授
- 两组的数据平均值合并_数据平均值合并计算 合并计算求平均值
- 携程网不能访问的真相曝光