串行化是指存储和获取磁盘文件、内存或其他地方中的对象。在串行化时,所有的实例数据都保存到存储介质上,
在取消串行化时,对象会被还原,且不能与其原实例区别开来。只需给类添加Serializable属性,就可以实现串行化实
的成员。反串行化是串行化的逆过程,数据从存储介质中读取出来,并赋给类的实例变量。串行化能保存现有对象的所有状态,
我想我们以前见过的一些游戏的角色账户中的dat文件应该就是被串行化的结果。我尝试了打开一个dat文件,果真得到了
我需要的信息,一些角色的等级之类的信息果然在里面。

串行化对象,需要先将对象加上[Serializable],如:

[Serializable]
public class user{}

首先需要添加序列化命名空间:
using System.Runtime.Serialization.Formatters.Binary;

/// <summary>
/// 写入磁盘
/// </summary>
/// <param name="obj">实例对象</param>
/// <param name="file">保存的文件路径跟文件名称</param>
private static void WriteBinary(object obj, string file)
{ using (Stream input = File.OpenWrite(HttpContext.Current.Server.MapPath(file)))
{
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(input, obj);
}
}
/// <summary>
/// 读出磁盘文件
/// </summary>
/// <param name="file">保存的文件路径跟文件名称</param>
/// <returns>object对象</returns>
public static object ReadBinary(string file)
{
using (Stream outPut = File.OpenRead(HttpContext.Current.Server.MapPath(file)))
{
BinaryFormatter bf = new BinaryFormatter();
object user = bf.Deserialize(outPut);
if (user != null)
{
return user;
}
}
return null;
}

实例应用:

protected void Page_Load(object sender, EventArgs e)
{
//.dat文件,这种文件是纯文本,没有数据属性结构方面的信息,可以用记事本等文本工具打开
WriteBinary(new user()
{
id = 1,
title = "贵源网络",
url = "gzmsg.com",
co = "软件开发",
des="描述"
}, "~/upload/data/user.dat");
user user = ReadBinary("~/upload/data/user.dat") as user;
Response.Write(user.des); //描述
}
[Serializable]
public class user
{
public int id { get; set; }
public string title { get; set; }
public string url { get; set; }
public string co { get; set; }
public string des = string.Empty;
}

如果需要对部分字段序列化部分不序列化时,我们可以按照如下设置实现

[Serializable]
public class user
{
public int id { get; set; }
public string title { get; set; }
public string url { get; set; }
public string co { get; set; }
[NonSerialized]
public string des = string.Empty;
}

C#--串行化与反串行化的更多相关文章

  1. PHP中的抽象类与抽象方法/静态属性和静态方法/PHP中的单利模式(单态模式)/串行化与反串行化(序列化与反序列化)/约束类型/魔术方法小结

      前  言  OOP  学习了好久的PHP,今天来总结一下PHP中的抽象类与抽象方法/静态属性和静态方法/PHP中的单利模式(单态模式)/串行化与反串行化(序列化与反序列化). 1  PHP中的抽象 ...

  2. Hadoop基础-Protocol Buffers串行化与反串行化

    Hadoop基础-Protocol Buffers串行化与反串行化 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们之前学习过很多种序列化文件格式,比如python中的pickl ...

  3. C#基础知识回顾--串行化与反串行化

    串行化是指存储和获取磁盘文件.内存或其他地方中的对象.在串行化时,所有的实例数据都保存到存储介质上, 在取消串行化时,对象会被还原,且不能与其原实例区别开来.只需给类添加Serializable属性, ...

  4. Hadoop基础-Apache Avro串行化的与反串行化

    Hadoop基础-Apache Avro串行化的与反串行化 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Apache Avro简介 1>.Apache Avro的来源 ...

  5. vlc命令行: 转码 流化 推流

    vlc命令行: 转码 流化 推流 写在命令行之前的话: VLC不仅仅可以通过界面进行播放,转码,流化,也可以通过命令行进行播放,转码和流化.还可以利用里面的SDK进行二次开发. vlc命令行使用方法: ...

  6. Androidstudio2.0.0汉化教程及汉化包。

    ()Eric为大家带来Androidstudio2.0.0的简单汉化教程,许多小伙伴喜欢使用中文版的AS那么没有中文的AS只能靠自己汉化取得更好的体验. 第一步下载AS2.0.0汉化包,我有链接给大家 ...

  7. hbase非结构化数据库与结构化数据库比较

    目的:了解hbase与支持海量数据查询的特性以及实现方式 传统关系型数据库特点及局限 传统数据库事务性特别强,要求数据完整性及安全性,造成系统可用性以及伸缩性大打折扣.对于高并发的访问量,数据库性能不 ...

  8. QRowTable表格控件-支持hover整行、checked整行、指定列排序等

    目录 一.开心一刻 二.嘴一嘴 三.效果展示 四.浅谈实现 五.自定义数据源 1.data函数 2.flags函数 六.自定义视图 1.目的 2.问题分析 七.测试 八.相关文章 原文链接:QRowT ...

  9. 深度学习面试题11:池化(same池化、valid池化、带深度的池化)

    目录 Same最大值池化 多深度的same池化 Same平均值池化 Valid池化 参考资料 池化(Pooling)操作与卷积类似,取输入张量的每个位置的矩形领域内的最大值或平均值作为该位置的输出. ...

随机推荐

  1. CAD扩展属性的提取--FME方式

    一.CAD的扩展属性 了解一下CAD的扩展属性方式,CAD的扩展属性包括二类: 基于CAD二次开发的软件产品(例如南方cass),其扩展属性是附属在图形(点.多段线.注记.面)上面的,它是以XReco ...

  2. Android 和 iOS 应用程序开发对比 [持续更新]

    1.Android 用字典模式统一管理应用程序中UI上用到的所有字符串. 比如文本框的默认文本.按钮的名字等等.表现形式:XML文件 Android中 "@string/text_filed ...

  3. python测试开发django-34.xadmin管理后台

    前言 django自带的admin后台管理页面有点丑陋,于是网上的大神优化了一版后台管理xadmin,并且开源了,在github开源下载到源码. 注意环境搭配: django 2.1.2 xadmin ...

  4. <hr> 水平样式分隔线

    <hr>  水平样式分隔线 <html> <body> <p>hr 标签定义水平线:</p> <hr /> <p>这 ...

  5. [国际A类会议] 2018最最最顶级的人工智能国际峰会汇总!CCF推荐!

    copy from :  http://www.sohu.com/a/201860341_99975651 如果今年的辉煌我们没有赶上,那么我们可以提前为明年的大会做准备.现在,AI脑力波小编就为大家 ...

  6. yolo源码解析(二)

    五 读取数据pascal_voc.py文件解析 我们在YOLENet类中定义了两个占位符,一个是输入图片占位符,一个是图片对应的标签占位符,如下: #输入图片占位符 [NONE,image_size, ...

  7. Protobuf 协议语言指南

    l  定义一个消息(message)类型 l  标量值类型 l  Optional 的字段及默认值 l  枚举 l  使用其他消息类型 l  嵌套类型 l  更新一个消息类型 l  扩展 l  包(p ...

  8. 第三方IDC性能测评主要指标

    弹性计算性能弹性计费模式就是 "即用即付 ",最小单位可以按小时来计算.随着云计算负载的增长,企业购买服务器带宽时的资源.   1.弹性计算性能   弹性计费模式就是"即 ...

  9. 【BZOJ】【3339】Rmq Problem

    离线+线段树 Orz Hzwer,引用题解: 这一题在线似乎比较麻烦 至于离线.. 首先按照左端点将询问排序 然后一般可以这样考虑 首先如何得到1-i的sg值呢 这个可以一开始扫一遍完成 接着考虑l- ...

  10. Java NIO Channel to Channel Transfers

    In Java NIO you can transfer data directly from one channel to another, if one of the channels is a ...