ISerializable与BinaryFormatter配合,实现将对象序列化成stream,可以保存或网络传输与反序列化
C#中ISerializable与BinaryFormatter配合,可以实现将对象序列化成stream,进而可以保存或网络传输以及进行反序列化。
(注意: 这是一个年代久远了的知识点!)
以下是网上一个简单的例子:
https://blog.csdn.net/callmeback/article/details/8299845
不解释,看注释。
/*
* Created Date: 2012/12/15
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.IO;
using System.Xml;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Security.Permissions;
namespace TestISerializable
{
/// <summary>
/// SerialBase:继承自ISerializable
/// </summary>
[Serializable]
public class SerialBase : ISerializable
{
public int n1;
public int n2;
public String str;
public SerialBase()
{
}
#region ISerializable Members
/// <summary>
/// 构造函数
/// </summary>
/// <param name="info"></param>
/// <param name="context"></param>
protected SerialBase(SerializationInfo info, StreamingContext context)
{
n1 = info.GetInt32("n1");
n2 = info.GetInt32("n2");
str = info.GetString("str");
}
/// <summary>
/// ISerializable接口函数
/// </summary>
/// <param name="info"></param>
/// <param name="context"></param>
[SecurityPermissionAttribute(SecurityAction.Demand, SerializationFormatter = true)]
public virtual void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("n1", n1);
info.AddValue("n2", n2);
info.AddValue("str", str);
}
#endregion
}
[Serializable]
public class SerialDerived : SerialBase
{
public int num;
public SerialDerived() : base()
{
}
#region ISerializable Members
/// <summary>
/// 构造函数
/// </summary>
/// <param name="si"></param>
/// <param name="context"></param>
protected SerialDerived(SerializationInfo si, StreamingContext context) : base(si, context)
{
num = si.GetInt32("num");
}
/// <summary>
/// ISerializable接口函数
/// </summary>
/// <param name="si"></param>
/// <param name="context"></param>
[SecurityPermissionAttribute(SecurityAction.Demand, SerializationFormatter = true)]
public override void GetObjectData(SerializationInfo si, StreamingContext context)
{
base.GetObjectData(si, context);
si.AddValue("num", num);
}
#endregion
}
class Program
{
/// <summary>
/// 保存
/// </summary>
public static void SerializeBinary()
{
SerialDerived obj = new SerialDerived();
obj.n1 = 123;
obj.n2 = 234;
obj.str = "dsojgoajd";
obj.num = 333;
FileStream stream = new FileStream("test.bin", FileMode.Create);
BinaryFormatter b = new BinaryFormatter();
b.Serialize(stream, obj);
stream.Close();
}
/// <summary>
/// 读取
/// </summary>
public static void DeserializeBinary()
{
SerialDerived obj = new SerialDerived();
FileStream stream = new FileStream("test.bin", FileMode.Open, FileAccess.Read, FileShare.Read);
BinaryFormatter b = new BinaryFormatter();
obj = b.Deserialize(stream) as SerialDerived;
Console.WriteLine(obj.n1);
Console.WriteLine(obj.n2);
Console.WriteLine(obj.str);
Console.WriteLine(obj.num);
stream.Close();
}
public static void Main(string[] args)
{
// TODO: Implement Functionality Here
// 保存并且读取为二进制文件
SerializeBinary();
DeserializeBinary();
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
}
}
ISerializable与BinaryFormatter配合,实现将对象序列化成stream,可以保存或网络传输与反序列化相关推荐
- 将python对象序列化成php能读取的格式(即能反序列化到对象)
转载自:http://my.oschina.net/zuoan001/blog/94914 代码如下: #coding:utf-8 # vim: encoding=utf-8:ft=python:et ...
- Java对象序列化乱码6_对象序列化成字符串乱码解决
问题描述: 将一个对象序列化成字符串后,字符串是乱码的,并且反序列化报错. 代码如下: import com.alibaba.fastjson.JSONObject; import org.sprin ...
- java 序列化成xml文件_将Java对象序列化成JSON和XML格式
1.先定义一个Java对象Person: public class Person { String name; int age; int number; public String getName() ...
- 将Java对象序列化成XML格式,将XML反序列化还原为Java对象
摘要:将Java对象序列化成XML格式,将XML反序列化还原为Java对象. 一:创建Maven工程,引入xstream依赖: <!--xstream--><dependency&g ...
- 对象序列化成JSON格式
json是一种轻量级的数据交换语言,将对象序列化为json格式,可以在网络上传输,且各个平台都有成熟的工具,可以很快的将json反序列化为对应语言所需要的格式. 将java对象序列化为json格式关键 ...
- XmlSerializer 对象序列化成XML 自定义编码格式(gb2312)
随着面向服务(SOA)的开发方式的兴起,客户端和服务端之间的消息传送,很多采用了XML的格式.但是大家在日常的开发中,应该会有这么种体验,就是组织xml格式的代码太繁琐,这篇随笔也是为了和大家分享下简 ...
- com.fasterxml.jackson将对象序列化成json时,出现在json里的属性名称是怎么来的
如果不考虑用任何annotation指定出现在json string里的属性名称的话,默认的逻辑是将getter方法里,"get"之后的字符串的首字母小写. 比如: getJerD ...
- C#将对象序列化成JSON字符串
using System.Web.Script.Serialization; public void ProcessRequest(HttpContext context) { context.Res ...
- 关于DateTime对象序列化为Json之后的若干问题
将Datetime对象序列化成Json对象是常有的事情,微软的序列化方法会将Datetime对象序列化成一个字符串: "\/Date(1234656000000)\/" 这样的字符 ...
最新文章
- 美团副总裁夏华夏:科技应该为每一个普通人服务,要做“接地气的AI” | MEET2021...
- linux dmesg信息哪来的,linux中的dmesg命令简介
- c++ 基本数据类型字节数
- Tableau实战系列Tableau基础概念全解析 (三)-维度和度量
- ML之Medicine:利用机器学习研发药物—《Machine Learning for Pharmaceutical Discovery and Synthesis Consortium》
- java map的理解_java中的hashmap理解
- 湖南单招计算机专业大学排名,2021湖南单招学校排名及分数线:湖南单招分数线高吗?...
- 计算任意两个圆的交点
- Go基础编程:Socket编程
- 【数学建模】算法模型(三)|模糊综合和灰色关联分析 元胞自动机模型 图论 BP神经网络算法 马尔可夫链蒙特卡罗算法(MCMC)
- 微信公众平台开发(8)--微信公众平台接入完整实例
- 删除回收站右键找回清空的文件
- 混合移动应用中地图导航功能开发与应用
- 【其实是空空荡荡的牵挂,没有结局的怀念】
- 九州PTV8508优盘破解免固件刷入第三方app教程
- linux ntp时间同步失败,SUSE linux ntp时间不同步问题
- python英汉互译 谷歌翻译 免费实现调用
- Java面向对象实例(双色球摇号篇)
- 分式加法JAVA程序_十五:实战2-分式计算器
- win10系统应用程序无法正常启动提示0xc0000142错误的解决方法
热门文章
- 数学建模——遗传算法步骤及程序详解
- 在CSDN博客中输入数学公式
- 脱水缩合(字符串处理)
- shiro设置url过滤配置详解
- 413 Request Entity Too Large问题解决方法
- 重磅:国刊4区变1区!2021年中科院分区表正式公布!顶刊TPAMI 一区!IJCV 二区!...
- 风光互补并网发电系统实训台QY-TYN07
- Taking Photos with the Camera(拍照)
- 诚之和:Pytorch 统计模型参数量的操作 param.numel()
- 【Spark+NLP】14、使用IDEA运行spark小程序 + jar包在spark分布式环境中运行