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)\/" 这样的字符 ...
最新文章
- mysql自动监控_MySQL复制 自动监控脚本
- string (KMP+期望DP)
- 【转】牛人杰作 管饭哥登场
- 125w短波通信距离_125W军用自主选频短波电台
- 第二章:2线性表---单链表表示和实现
- 独立线程池的作用及IO线程池
- css定位position,absolute relative两种情况下,top,left,right,bottom的区别
- Python全栈(四)高级编程技巧之4.元类编程、迭代器和生成器
- 关于电脑开机自检声音的检测
- Java筑基24-集合02-List
- 2022年北京购房攻略二 (城区交通篇)
- vue中表格统计金额,前面设置美元符号,并设置颜色
- 霍元甲被日本人用烂肺药毒死(图)
- 有关H5第五章的样式属性
- 插入图片的时候,总是只是能漏出一点点其他部分都看不到,改变格式从插入型改成浮于文字上方才能完全显示,但浮于文字上方的格式最后不好排版和编辑,稍微一改,整个就乱了,求助如何让插入型的文字图片完全显示出来
- 使用IJKPlayer播放视频实现了一些播放视频的基本操作
- 如何利用迅雷来下载百度云文件?(此方法只适用于大文件需要启动百度网盘的客户端这种情况)...
- java配置环境变量path(JAVA配置环境变量失败)
- 8s数据导入导出的load和unload解析
- win7ie11调用java失败,win7纯净版系统下ie11无法加载java插件
热门文章
- n++++n,n----n 的区别
- 序列,级数,柯西收敛准则,无穷级数定理
- Java项目开发(航空管理系统)
- LoRaTest\LoRaTest.axf: Error: L6218E: Undefined symbol IoePinOff (referred from sx1276-hal.o).
- C语言教学:下载安装Code::Blocks,设定C程式编译器
- 实用计算机技术ps,实用的ps技巧.doc
- Linux tar 命令浅析
- 前端学习必须掌握知识点
- C++访问类的私有数据成员的三种方法
- 晶振相关知识及其布线规范和晶振EMC处理