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. 美团副总裁夏华夏:科技应该为每一个普通人服务,要做“接地气的AI” | MEET2021...
  2. linux dmesg信息哪来的,linux中的dmesg命令简介
  3. c++ 基本数据类型字节数
  4. Tableau实战系列Tableau基础概念全解析 (三)-维度和度量
  5. ML之Medicine:利用机器学习研发药物—《Machine Learning for Pharmaceutical Discovery and Synthesis Consortium》
  6. java map的理解_java中的hashmap理解
  7. 湖南单招计算机专业大学排名,2021湖南单招学校排名及分数线:湖南单招分数线高吗?...
  8. 计算任意两个圆的交点
  9. Go基础编程:Socket编程
  10. 【数学建模】算法模型(三)|模糊综合和灰色关联分析 元胞自动机模型 图论 BP神经网络算法 马尔可夫链蒙特卡罗算法(MCMC)
  11. 微信公众平台开发(8)--微信公众平台接入完整实例
  12. 删除回收站右键找回清空的文件
  13. 混合移动应用中地图导航功能开发与应用
  14. 【其实是空空荡荡的牵挂,没有结局的怀念】
  15. 九州PTV8508优盘破解免固件刷入第三方app教程
  16. linux ntp时间同步失败,SUSE linux ntp时间不同步问题
  17. python英汉互译 谷歌翻译 免费实现调用
  18. Java面向对象实例(双色球摇号篇)
  19. 分式加法JAVA程序_十五:实战2-分式计算器
  20. win10系统应用程序无法正常启动提示0xc0000142错误的解决方法

热门文章

  1. 数学建模——遗传算法步骤及程序详解
  2. 在CSDN博客中输入数学公式
  3. 脱水缩合(字符串处理)
  4. shiro设置url过滤配置详解
  5. 413 Request Entity Too Large问题解决方法
  6. 重磅:国刊4区变1区!2021年中科院分区表正式公布!顶刊TPAMI 一区!IJCV 二区!...
  7. 风光互补并网发电系统实训台QY-TYN07
  8. Taking Photos with the Camera(拍照)
  9. 诚之和:Pytorch 统计模型参数量的操作 param.numel()
  10. 【Spark+NLP】14、使用IDEA运行spark小程序 + jar包在spark分布式环境中运行