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微信开发系列(二)用户消息处理

    Force.com是国际知名的云平台公司,成功配置好Force.com作为微信公开号的服务端后,接下来需要的任务是处理用户发送的消息.当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML ...

  2. JSON/XML格式化插件比较

    一.引子 Chrome工具里面有很多json格式化的插件,可以让杂乱的json内容变得有序,我们先来看看效果: 正常情况下: 格式化后: 规整多了吧! 二.工具分享+比对 1.JSON Formatt ...

  3. Objective-C中@encode的使用

    今天看Mansonry的代码时,碰到一个生僻的关键字(也许只是自己没用过).:-) @encode  => 将给定类型编码为内部表示的字符串. 为了方便自己查阅,顺便也写个小例子,贴在这里,实践 ...

  4. UITextField 基本属性使用

    //设置文本框 透明度 tf.alpha = ; //设置文本颜色 tf.textColor = [UIColor orangeColor]; //设置文本文字 格式 tf.font = [UIFon ...

  5. 招聘一个靠谱的 iOS程序员

    一个靠谱的简历 简历非常能反映一个人的性格和水平,相比于你在学校获得多少奖项,工作经历.项目经 历.熟悉的技术等更加关键,如果还有博客和一些 Github 上的项目,好感度++,但记得在去面试前收拾下 ...

  6. IOS的UI基础01

    内容大纲:(红色表示博主个人重点记忆) 1.指定启动界面 带箭头就是首次启动的页面2.两个常用的快捷键3.拖线子控件注意事项4.一般情况下,UIView的容器是控制器的View.5.didRecive ...

  7. myeclipse2013 安装 egit

    myeclipse2013版本: Version: 2013 Build id: 11.0-20130401     手工安装不了,那就到市场上安装.     1.Help--->Install ...

  8. [AapacheBench工具]web性能压力测试工具的应用与实践

    背景:网站性能压力测试是性能调优过程中必不可少的一环.服务器负载太大而影响程序效率是很常见的事情,一个网站到底能够承受多大的用户访问量经常是我们最关心的问题.因此,只有让服务器处在高压情况下才能真正体 ...

  9. Effective Java 15 Minimize mutability

    Use immutable classes as much as possible instead of mutable classes. Advantage Easy to design, impl ...

  10. CentOS下安装MySQL

    首先通过网络链接的方式在线安装上mysql服务器端吧!(备注:我开始登录服务器的时候是用的其他用户而不是超级管理员,所以安装MySQL的时候需要切换到超级管理员才可以实现软件的正确安装.命令则是:su ...