【MFC】序列化(Serialize)、反序列化(Deserialize)
1、首先在头文件里面声明
DECLARE_SERIAL(CSelectionSerial)
2、重写CObject的Serialize函数
virtual void Serialize(CArchive& ar)
{
CObject::Serialize(ar);
//关键代码
if(ar.IsStoring())
{
//序列化
ar << this->xxx;
}
else
{
//反序列化
ar >>xxx;
}
}
3、在类开始出定义
IMPLEMENT_SERIAL(Person, CObject, VERSIONABLE_SCHEMA | 2)
下面给出一个列子:
1、序列化类.h文件
#pragma once // CSelectionSerial 命令目标
class CSelectionSerial : public CObject
{
public:
DECLARE_SERIAL(CSelectionSerial) //必要内容
CSelectionSerial();
virtual ~CSelectionSerial();
//序列化重写
//参数ar,CArchive类型
virtual void Serialize(CArchive& ar); //必要内容
void SetCurrent(const int index);
int GetCurrent();
void SetFile(const CString file);
CString GetFile();
private:
int m_Current;
CString m_File;
};
2、序列化类.cpp文件
// SelectionSerial.cpp : 实现文件
// #include "stdafx.h"
#include "SelectionSerial.h" // CSelectionSerial
IMPLEMENT_SERIAL(CSelectionSerial,CObject,VERSIONABLE_SCHEMA | ) //必要内容
CSelectionSerial::CSelectionSerial()
{
} CSelectionSerial::~CSelectionSerial()
{
} // CSelectionSerial 成员函数 void CSelectionSerial::Serialize(CArchive& ar) //必要内容
{
CObject::Serialize(ar);
if(ar.IsStoring())
{
//序列化
ar<<this->m_File;
ar<<this->m_Current;
}
else
{
//反序列化
ar>>this->m_File;
ar>>this->m_Current;
}
} void CSelectionSerial::SetCurrent(int index)
{
m_Current=index;
} int CSelectionSerial::GetCurrent()
{
return m_Current;
}
void CSelectionSerial::SetFile(CString file)
{
m_File=file;
} CString CSelectionSerial::GetFile()
{
return m_File;
}
3、序列化
void Serializable(CSelectionSerial* serial,CString filePath)
{
CFile file(filePath,CFile::modeCreate|CFile::modeWrite);
file.SeekToBegin();
::CArchive arStore(&file,CArchive::store);
arStore.WriteObject(serial);
arStore.Flush();
arStore.Close();
file.Close();
}
4、反序列化
CSelectionSerial* DeSerializable(CString filePath)
{
CFile file(filePath,CFile::modeRead);
file.SeekToBegin();
::CArchive arLoad(&file,CArchive::load);
CSelectionSerial* serial = (CSelectionSerial*)arLoad.ReadObject(RUNTIME_CLASS(CSelectionSerial));
arLoad.Close();
file.Close();
return serial;
}
【MFC】序列化(Serialize)、反序列化(Deserialize)的更多相关文章
- MFC序列化与反序列化
#pragma once #include "afx.h" #include <vector> using std::vector; class HzyData : p ...
- 【转】【C#】序列化(Serialize)、反序列化(Deserialize)
序列化又称串行化,是.NET运行时环境用来支持用户定义类型的流化的机制.其目的是以某种存储形成使自定义对象持久化,或者将这种对象从一个地方传输到另一个地方. .NET框架提供了两种串行化的方式: 1. ...
- C#序列化与反序列化(Serialize,Deserialize)实例详解
这篇文章主要介绍了C#序列化与反序列化(Serialize,Deserialize)的方法,实例分析了C#序列化与反序列化的常见技巧,需要的朋友可以参考下 本文实例讲述了C#序列化与反序列化(Seri ...
- 序列化与反序列化Serialize&Deserialize
序列化是指一个对象的实例可以被保存,保存成一个二进制串,当然,一旦被保存成二进制串,那么也可以保存成文本串了.比如,一个计数器,数值为2,我们可以用字符串“2”表示.如果有个对象,叫做connter, ...
- [Java]LeetCode297. 二叉树的序列化与反序列化 | Serialize and Deserialize Binary Tree
Serialization is the process of converting a data structure or object into a sequence of bits so tha ...
- [LintCode] Serialize and Deserialize Binary Tree(二叉树的序列化和反序列化)
描述 设计一个算法,并编写代码来序列化和反序列化二叉树.将树写入一个文件被称为“序列化”,读取文件后重建同样的二叉树被称为“反序列化”. 如何反序列化或序列化二叉树是没有限制的,你只需要确保可以将二叉 ...
- 深入C#学习系列一:序列化(Serialize)、反序列化(Deserialize)
序列化概述: 序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程.在序列化期间,对象将其当前状态写入到临时或持久性存储区.以后,可以通过从存储区中读取或反序列化对象 ...
- 深入C#学习系列一:序列化(Serialize)、反序列化(Deserialize)(转)
序列化又称串行化,是.NET运行时环境用来支持用户定义类型的流化的机制.其目的是以某种存储形成使自定义对象持久化,或者将这种对象从一个地方传输到另一个地方. .NET框架提供了两种串行化的方式: ...
- 297 Serialize and Deserialize Binary Tree 二叉树的序列化与反序列化
序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据.请设计一个算法来实现二叉树 ...
- [LeetCode] 297. Serialize and Deserialize Binary Tree 二叉树的序列化和反序列化
Serialization is the process of converting a data structure or object into a sequence of bits so tha ...
随机推荐
- 2015第18本:从0到1,ZERO to ONE, Notes on startups, or how to build the future
<从0到1>中文版的副标题是”开创商业与未来的秘密“,题目大得吓人,英文副标题就谨慎了许多:Notes on startups, or how to build the future. 全 ...
- Python基础(8)--文件
文件是我们储存信息的地方,我们经常要对文件进行读.写.删除等的操作,在Python中,我们可用Python提供的函数和方法方便地操作文件.文件可以通过调用open或file来打开,open通常比fil ...
- 基础学习day06---面向对象二---static,类的初始化和调用顺序、单例模式
一.static关键字 1.1.static关键字 静态:static用法:是一个修饰符,用于修饰成员(成员变量,成员函数)static 修饰的内容,所有对象共享当成员被静态修饰后,就多了一个调用方式 ...
- 实验:传输层:UDP协议 学习笔记
一.传输层协议 从之前介绍的网络层协议来看,通信的两端是两台主机,IP数据报首部就标明了这两台主机的IP地址.但是从传输层来看,是发送方主机中的一个进程与接收方主机中的一个进程在交换数据,因此,严格地 ...
- 返回顶部 和ico标题图片的制作
<link rel="shortcut icon" href="bitbug_favicon.ico">---比特虫ico网页快速制作<tit ...
- C#获取HTML文件指定DIV内容
最近自己找了一个开源的博客网站,放到阿里云上,方便自己发布博客. 我一般把文章发布到博客园和QQ空间,家了这个网站后又要多发布一次,为了省事就做了一个从博客园读取文章的功能: 输入链接URL地址点击提 ...
- Nde模块篇
/*模块分为两种:原生模块和文件模块.原生模块即Node.js API提供的原生模块,原生模块在启动时已经被加载.文件模块即为动态加载模块,加载文件模块的工作主要由原生模块 module 来实现和完成 ...
- 用mciSendString做音乐播放器
音乐操作类 public class clsMCI { public clsMCI() { // // TODO: 在此处添加构造函数逻辑 // } //定义API函数使用的字符串变量 [Marsha ...
- (五) openwrt打包过程
标签(空格分隔): Makefile 本周是成胖子每周一博第六周,更好地阅读体验,请点击这里 前言 前面我们已经讲了openwrt编译的大部分过程,包括大致的编译步骤,ipk的编译等.今天是我这个系列 ...
- C++ new(1)
如果找工作的同学看一些面试的书,我相信都会遇到这样的题:sizeof 不是函数,然后举出一堆的理由来证明 sizeof 不是函数.在这里,和 sizeof 类似,new 和 delete 也不是函数, ...