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)的更多相关文章

  1. MFC序列化与反序列化

    #pragma once #include "afx.h" #include <vector> using std::vector; class HzyData : p ...

  2. 【转】【C#】序列化(Serialize)、反序列化(Deserialize)

    序列化又称串行化,是.NET运行时环境用来支持用户定义类型的流化的机制.其目的是以某种存储形成使自定义对象持久化,或者将这种对象从一个地方传输到另一个地方. .NET框架提供了两种串行化的方式: 1. ...

  3. C#序列化与反序列化(Serialize,Deserialize)实例详解

    这篇文章主要介绍了C#序列化与反序列化(Serialize,Deserialize)的方法,实例分析了C#序列化与反序列化的常见技巧,需要的朋友可以参考下 本文实例讲述了C#序列化与反序列化(Seri ...

  4. 序列化与反序列化Serialize&Deserialize

    序列化是指一个对象的实例可以被保存,保存成一个二进制串,当然,一旦被保存成二进制串,那么也可以保存成文本串了.比如,一个计数器,数值为2,我们可以用字符串“2”表示.如果有个对象,叫做connter, ...

  5. [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 ...

  6. [LintCode] Serialize and Deserialize Binary Tree(二叉树的序列化和反序列化)

    描述 设计一个算法,并编写代码来序列化和反序列化二叉树.将树写入一个文件被称为“序列化”,读取文件后重建同样的二叉树被称为“反序列化”. 如何反序列化或序列化二叉树是没有限制的,你只需要确保可以将二叉 ...

  7. 深入C#学习系列一:序列化(Serialize)、反序列化(Deserialize)

    序列化概述: 序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程.在序列化期间,对象将其当前状态写入到临时或持久性存储区.以后,可以通过从存储区中读取或反序列化对象 ...

  8. 深入C#学习系列一:序列化(Serialize)、反序列化(Deserialize)(转)

    序列化又称串行化,是.NET运行时环境用来支持用户定义类型的流化的机制.其目的是以某种存储形成使自定义对象持久化,或者将这种对象从一个地方传输到另一个地方.    .NET框架提供了两种串行化的方式: ...

  9. 297 Serialize and Deserialize Binary Tree 二叉树的序列化与反序列化

    序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据.请设计一个算法来实现二叉树 ...

  10. [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 ...

随机推荐

  1. Force.com微信开发系列(一) 后台配置

    为寻找国内免费云资源作为微信后台,花了一天时间试用SinaAppEngine(SAE),调试太不方便用户体验差.新浪作为媒体公司技术功底经不起考验,亚马逊能推出AWS,新浪还不行!更好选项是百度Bai ...

  2. Jsoup解析Html中文文档

    jsoup 简介Java 程序在解析 HTML 文档时,相信大家都接触过 htmlparser 这个开源项目,我曾经在 IBM DW 上发表过两篇关于 htmlparser 的文章,分别是:从 HTM ...

  3. Python数据结构与算法--List和Dictionaries

    Lists 当实现 list 的数据结构的时候Python 的设计者有很多的选择. 每一个选择都有可能影响着 list 操作执行的快慢. 当然他们也试图优化一些不常见的操作. 但是当权衡的时候,它们还 ...

  4. Java眼中的XML--文件读取--2 应用SAX方式解析XML

    1.获取一个SAXParserFactory的实例.2.通过factory获取SAXParser实例.  3.新建一个包和继承自DefaultHandler的类.  因为SAX遍历方式,比如便利一个节 ...

  5. 《慕客网:IOS-动画入门》学习笔记

    新建Cocoa Touch Class,语言是swift 然后继续为界面添加一个普通的View Controller,并且添加前面视图的静态table的转向剪头指向这个View Controller, ...

  6. SQL 在表中随机取数据

    在一张10万行产品表(Product)中,随机取10条数据的几种方式: SET STATISTICS IO ON SELECT TOP 10 ID FROM dbo.Product(NOLOCK) W ...

  7. 关于Redis持久化

    Redis有两种持久化的方式:快照(RDB文件)和追加式文件(AOF文件) RDB持久化方式是在一个特定的间隔保存某个时间点的一个数据快照. AOF(Append only file)持久化方式则会记 ...

  8. mongo学习笔记(六):linux上搭建

    linux分以下几台 monogos mongocfg mongod1 mongod2 1.用ssh把 mongodb-linux-x86_64-3.0.6.tgz 移到linux /root上 2. ...

  9. 一对一关联查询时使用relation连贯操作查询后,调用getLastSql()方法输出的sql语句

    如题: 一对一关联查询时使用relation连贯操作查询后,调用getLastSql()方法输出的sql语句不是一条关联查询语句. 例如: $list = $db->relation(true) ...

  10. Python开发之【简单计算器】

    开发一个简单的python计算器 1.实现加减乘除及括号优先级解析 2.用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * ...