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,可以保存或网络传输与反序列化相关推荐

  1. 将python对象序列化成php能读取的格式(即能反序列化到对象)

    转载自:http://my.oschina.net/zuoan001/blog/94914 代码如下: #coding:utf-8 # vim: encoding=utf-8:ft=python:et ...

  2. Java对象序列化乱码6_对象序列化成字符串乱码解决

    问题描述: 将一个对象序列化成字符串后,字符串是乱码的,并且反序列化报错. 代码如下: import com.alibaba.fastjson.JSONObject; import org.sprin ...

  3. java 序列化成xml文件_将Java对象序列化成JSON和XML格式

    1.先定义一个Java对象Person: public class Person { String name; int age; int number; public String getName() ...

  4. 将Java对象序列化成XML格式,将XML反序列化还原为Java对象

    摘要:将Java对象序列化成XML格式,将XML反序列化还原为Java对象. 一:创建Maven工程,引入xstream依赖: <!--xstream--><dependency&g ...

  5. 对象序列化成JSON格式

    json是一种轻量级的数据交换语言,将对象序列化为json格式,可以在网络上传输,且各个平台都有成熟的工具,可以很快的将json反序列化为对应语言所需要的格式. 将java对象序列化为json格式关键 ...

  6. XmlSerializer 对象序列化成XML 自定义编码格式(gb2312)

    随着面向服务(SOA)的开发方式的兴起,客户端和服务端之间的消息传送,很多采用了XML的格式.但是大家在日常的开发中,应该会有这么种体验,就是组织xml格式的代码太繁琐,这篇随笔也是为了和大家分享下简 ...

  7. com.fasterxml.jackson将对象序列化成json时,出现在json里的属性名称是怎么来的

    如果不考虑用任何annotation指定出现在json string里的属性名称的话,默认的逻辑是将getter方法里,"get"之后的字符串的首字母小写. 比如: getJerD ...

  8. C#将对象序列化成JSON字符串

    using System.Web.Script.Serialization; public void ProcessRequest(HttpContext context) { context.Res ...

  9. 关于DateTime对象序列化为Json之后的若干问题

    将Datetime对象序列化成Json对象是常有的事情,微软的序列化方法会将Datetime对象序列化成一个字符串: "\/Date(1234656000000)\/" 这样的字符 ...

最新文章

  1. mysql自动监控_MySQL复制 自动监控脚本
  2. string (KMP+期望DP)
  3. 【转】牛人杰作 管饭哥登场
  4. 125w短波通信距离_125W军用自主选频短波电台
  5. 第二章:2线性表---单链表表示和实现
  6. 独立线程池的作用及IO线程池
  7. css定位position,absolute relative两种情况下,top,left,right,bottom的区别
  8. Python全栈(四)高级编程技巧之4.元类编程、迭代器和生成器
  9. 关于电脑开机自检声音的检测
  10. Java筑基24-集合02-List
  11. 2022年北京购房攻略二 (城区交通篇)
  12. vue中表格统计金额,前面设置美元符号,并设置颜色
  13. 霍元甲被日本人用烂肺药毒死(图)
  14. 有关H5第五章的样式属性
  15. 插入图片的时候,总是只是能漏出一点点其他部分都看不到,改变格式从插入型改成浮于文字上方才能完全显示,但浮于文字上方的格式最后不好排版和编辑,稍微一改,整个就乱了,求助如何让插入型的文字图片完全显示出来
  16. 使用IJKPlayer播放视频实现了一些播放视频的基本操作
  17. 如何利用迅雷来下载百度云文件?(此方法只适用于大文件需要启动百度网盘的客户端这种情况)...
  18. java配置环境变量path(JAVA配置环境变量失败)
  19. 8s数据导入导出的load和unload解析
  20. win7ie11调用java失败,win7纯净版系统下ie11无法加载java插件

热门文章

  1. n++++n,n----n 的区别
  2. 序列,级数,柯西收敛准则,无穷级数定理
  3. Java项目开发(航空管理系统)
  4. LoRaTest\LoRaTest.axf: Error: L6218E: Undefined symbol IoePinOff (referred from sx1276-hal.o).
  5. C语言教学:下载安装Code::Blocks,设定C程式编译器
  6. 实用计算机技术ps,实用的ps技巧.doc
  7. Linux tar 命令浅析
  8. 前端学习必须掌握知识点
  9. C++访问类的私有数据成员的三种方法
  10. 晶振相关知识及其布线规范和晶振EMC处理