首页 > 序列化例子

序列化例子

C#中的"序列化" Serializable 理解

我的理解:      比如用一个类描述一张合同,而这个类实例化后其中的字段保存着合同的信息,如果现在要把这个类的实例发送到另一台机器、另一个窗体或是想保存这个类以便以 后再取出来用(持久化对象),可以对这个类进行序列化(序列化实际上是一个信息流),传送或保存,用的时候再反序列化重新生成这个对象

为什么您想要使用序列化?有两个最重要的原因促使对序列化的使用:一个原因是将对象的状态保持在存储媒体中,以便可以在以后重新创建精确的副本;另 一个原因是通过值将对象从一个应用程序域发送到另一个应用程序域中。例如,序列化可用于在    ASP.NET    中保存会话状态并将对象复制到    Windows    窗体的剪贴板中。远程处理还可以使用序列化通过值将对象从一个应用程序域传递到另一个应用程序域中。          序列化的是对象的状态      也就是对象数据成员的值和方法是没有关系的

跨应用程序域通信时,要用到序列化      以及用WEB服务时 一:BinaryFormatter序列化

序列化简单点来理解就是把内存的东西写到硬盘中,当然也可以写到内存中(这个内容我会在后面写一个例子).而反序列化就是从硬盘中把信息读到内存中.就这么简单,呵呵,现在来看下面的例子吧!

在这篇文章中我将使用BinaryFormatter序列化类Book作为例子,希望大家能从例子中深刻体会什么是序列化.

定义类Book:

[Ref="tag-863-1.html">Serializable] public Class Book { String name; Float   price; string author;

public Book(string bookname, float bookprice, string bookauthor) { name = bookname; price = bookprice; author = bookauthor; } }

在类的上面增加了属性:Serializable.(如果不加这个属性,将抛出SerializationException异常).

通过这个属性将Book标志为可以序列化的.当然也有另一种方式使类Book可以序列化,那就是实行ISerializable接口了.在这里大家要注意了:Serializable属性是不能被继承的咯!!!

如果你不想序列化某个变量,该怎么处理呢?很简单,在其前面加上属性[NonSerialized] .比如我不想序列化

string author;

那我只需要

[NonSerialized]

string author;

好了,现在就告诉大家怎么实现序列化:

我们使用namespace:

using System;

using System.IO;

using System.RunTime.Serialization.Formatters.Binary;

首先创建Book实例,like this:

Book book = new Book("Day and Night", Numbertype="1" tcsc="0">30.0f, "Bruce");

接着当然要创建一个文件了,这个文件就是用来存放我们要序列化的信息了.

FileStream fs = new FileStream(@"C:ook.dat", FileMode.Create);

序列化的实现也很简单,like this:

BinaryFormatter formatter = new BinaryFormatter(); formatter.Serialize(fs, book);

很简单吧!现在我列出整个原代码,包括反序列化.

static Void Main(string[] args) { Book book = new Book("Day and Night", 30.0f, "Bruce");

using(FileStream fs = new FileStream(@"C:ook.dat", FileMode.Create)) { BinaryFormatter formatter = new BinaryFormatter(); formatter.Serialize(fs, book); }

book = null;

using(FileStream fs = new FileStream(@"C:ook.dat", FileMode.Open)) { BinaryFormatter formatter = new BinaryFormatter(); book = (Book)formatter.Deserialize(fs);//在这里大家要注意咯,他的返回值是Object } }

有不对的地方,请大家多多纠正.....

注意一定不要忘了: using   System.Runtime.Serialization.Formatters.Binary;       命名空间。

转载于:https://www.cnblogs.com/zxp19880910/archive/2012/07/09/2583659.html

更多相关:

  • 一、自定义序列化组件 新建一个任意名的py文件,里面导入serlizerfrom rest_framework import serializers 自定义一个类继承serializers,里面写需要序列化的字段方法一:继承serializers.Serializerclass BookSerlizer(serializers.S...

  • import pickle d = {   'name':'alex',   'role':'police',   'blood': 76,   'weapon':'AK47' } d_dump = pickle.dumps(d) #序列化 print (pickle.loads(d_dump)) #反序列化 f = open('ga...

  •   一年前就已经用过restframework, 当时觉得这个只是给web框架打辅助的, 他能实现的我也都实现(可能没有那么好用, 嘿嘿) 但是我有一种东西叫做效率, 时间就是金钱, 别人造好的就直接用就可以了, 自己其实没必要在去重复.   最近写一个调查问卷系统, 利用了以下知识点   1. django   2. restfra...

  •  本质上说,这并不是二进制序列化的问题,甚至不关序列化的问题。   你想要的是在两个内部结构一致但在不同命名空间(甚至不同项目)的同名类间做类型转换。     这个问题很常见,因为实际工作中经常会有此类需求,但是我们又不可能手动的把每个字段的值都抄来抄去。     解决此问题的方法很多,但都逃不开一个关键思想:A不知道B的存在,B不知...

  • 原文出自:http://www.importnew.com/21517.html 1. transient的作用及使用方法 我们都知道一个对象只要实现了Serilizable接口,这个对象就可以被序列化,java的这种序列化模式为开发者提供了很多便利,我们可以不必关系具体序列化的过程,只要这个类实现了Serilizable接口,这个类...

  • ========插入操作========= ====插入单个属性=====--为第一个book节点插入属性name值为"直接插入"set @data.modify('insert (attribute name {"直接插入"})into (/bookstore/book)[1]')/*output:

  • 一、代码结构概览1.核心部分configs:储存各种网络的yaml配置文件datasets:存放数据集的地方detectron2:运行代码的核心组件tools:提供了运行代码的入口以及一切可视化的代码文件。2.Tutorial部分demo:显而易见就是demodocs: 同样显而易见。。tests:提供了一些测试代码projects:...

  •     我刚刚接手这个项目的时候就被一系列不知所措的文件命名给深深的震惊了,那种振聋发聩不亚于听到赌王离世的消息。 首先请看,文件本来是用于处理“请假审批”,但是文件名居然叫做“teaApprove”,不要欺负我的初中英语不好,这个teaApprove我第一个感觉就是和“喝茶、茶叶”有关的业务,可是和我们这个项目八竿子打不着...

  • 这个问题简单,不做过多描述,如题所述,如果因为这个导致错误,请安装 npm install stylus-loader css-loader style-loader -D...

  • 使用这个宏TS_VERSION_MAOR来判断,这个宏定义在编译时生成在apidefs.h,它包含在ts/ts.h中,所以请在插件这包含...

  • linux valgrind Memcheck–内存检查工具 使用方法: 注意,这里要用debug版本,如果是release的运行文件,则用debug编译出来的可执行文件替换 输出到终端: valgrind --tool=memcheck --leak-check=full ./test.out 输出到文件: valgri...