vc++上的MFC的对象序列化和反序列化
注意点:
1. 必须类型序列化声明
DECLARE_SERIAL( Person )
2. 必须写出实现宏
IMPLEMENT_SERIAL(Person, CObject, VERSIONABLE_SCHEMA | 2)
3. 重写CObject中的Serialize函数
void Person::Serialize( CArchive& ar )
{
CObject::Serialize(ar);
//关键代码
if(ar.IsStoring()) {
//序列化
ar << this->age << this->sex << this->name;
} else {
//反序列化
ar >> this->age >> this->sex >> this->name;
}
}
序列化后的数据

- //Person.h
- #pragma once
- #include <afx.h>
- #include <string>
- #include <atlstr.h>
- using namespace std;
- class Person: public CObject
- {
- private:
- //注意MFC 不支持 标准std:string对象序列化, boost库支持std:string
- CString name;
- int age;
- char sex;
- public:
- DECLARE_SERIAL( Person )
- Person(void);
- Person(CString name, int age, char sex);
- virtual ~Person(void);
- virtual void Serialize(CArchive& ar);
- void setName(CString pName);
- CString getName();
- void setAge(int age);
- int getAge();
- void setSex(char sex);
- char getSex();
- };
- //Person.cpp
- #include "StdAfx.h"
- #include "Person.h"
- #include <afx.h>
- #include <string>
- //必须写出实现宏
- IMPLEMENT_SERIAL(Person, CObject, VERSIONABLE_SCHEMA | 2)
- Person::Person(void)
- {
- }
- Person::Person( CString name, int age, char sex )
- {
- this->name = name;
- this->age = age;
- this->sex = sex;
- }
- Person::~Person(void)
- {
- }
- void Person::setName( CString name)
- {
- this->name = name;
- }
- CString Person::getName()
- {
- return this->name;
- }
- void Person::setAge( int age )
- {
- this->age = age;
- }
- int Person::getAge()
- {
- return this->age;
- }
- void Person::setSex( char sex )
- {
- this->sex = sex;
- }
- char Person::getSex()
- {
- return this->sex;
- }
- void Person::Serialize( CArchive& ar )
- {
- CObject::Serialize(ar);
- //关键代码
- if(ar.IsStoring()) {
- //序列化
- ar << this->age << this->sex << this->name;
- } else {
- //反序列化
- ar >> this->age >> this->sex >> this->name;
- }
- }
- // main.cpp : 定义控制台应用程序的入口点。
- #include "stdafx.h"
- #include <tchar.h>
- #include <afx.h>
- #include <iostream>
- using namespace std;
- int _tmain(int argc, _TCHAR* argv[])
- {
- Person person;
- person.setAge(20);
- person.setName("zhangsan");
- person.setSex('1');
- CFile myFile(_T("c:/person.ser"), CFile::modeCreate | CFile::modeReadWrite);
- // Create a storing archive.
- CArchive arStore(&myFile, CArchive::store);
- // Write the object to the archive
- arStore.WriteObject(&person);
- arStore.Flush();
- // Close the storing archive
- arStore.Close();
- // Create a loading archive.
- myFile.SeekToBegin();
- CArchive arLoad(&myFile, CArchive::load);
- // Verify the object is in the archive.
- Person* p = (Person*) arLoad.ReadObject(person.GetRuntimeClass());
- arLoad.Close();
- //wcout << "姓名:" << name.GetBuffer(name.GetLength()) << endl;
- CString name = p->getName();
- wchar_t* pch = name.GetBuffer(0);
- wcout << "姓名:" << pch << endl;
- name.ReleaseBuffer(); //注意内在释放
- cout << "性别:" << p->getSex() << endl;
- cout << "年龄:" << p->getAge() << endl;
- delete p;
- return 0;
- }
vc++上的MFC的对象序列化和反序列化的更多相关文章
- java 对象序列化与反序列化
Java序列化与反序列化是什么? 为什么需要序列化与反序列化? 如何实现Java序列化与反序列化? 本文围绕这些问题进行了探讨. 1.Java序列化与反序列化 Java序列化是指把Java对象转换为 ...
- C#对象序列化与反序列化zz
C#对象序列化与反序列化(转载自:http://www.cnblogs.com/LiZhiW/p/3622365.html) 1. 对象序列化的介绍........................ ...
- C#对象序列化与反序列化
C#对象序列化与反序列化(转载自:http://www.cnblogs.com/LiZhiW/p/3622365.html) 1. 对象序列化的介绍.......................... ...
- Java学习笔记——IO操作之对象序列化及反序列化
对象序列化的概念 对象序列化使得一个程序可以把一个完整的对象写到一个字节流里面:其逆过程则是从一个字节流里面读出一个事先存储在里面的完整的对象,称为对象的反序列化. 将一个对象保存到永久存储设备上称为 ...
- Java之对象序列化和反序列化
一.对象序列化和反序列化存在的意义: 当你创建对象,只要你需要,他就一直存在,但当程序结束,对象就会消失,但是存在某种情况,如何让程序在不允许的状态,仍然保持该对象的信息.并在下次程序运行的时候使用该 ...
- Java 序列化 对象序列化和反序列化
Java 序列化 对象序列化和反序列化 @author ixenos 对象序列化是什么 1.对象序列化就是把一个对象的状态转化成一个字节流. 我们可以把这样的字节流存储为一个文件,作为对这个对象的复制 ...
- Java对象序列化与反序列化
对象序列化的目标是将对象保存在磁盘中或者在网络中进行传输.实现的机制是允许将对象转为与平台无关的二进制流. java中对象的序列化机制是将允许对象转为字节序列.这些字节序列可以使Java对象脱离程序存 ...
- FastJson实现复杂对象序列化与反序列化
原文:http://blog.csdn.net/xqhadoop/article/details/62217954 一.认识FastJson 1.优势 fastjson是目前java语言中最快的jso ...
- Java Io 对象序列化和反序列化
Java 支持将任何对象进行序列化操作,序列化后的对象文件便可通过流进行网络传输. 1. 对象序列化就是将对象转换成字节序列,反之叫对象的反序列化 2. 序列化流ObjectOut ...
随机推荐
- Swift - 08 - 元组
//: Playground - noun: a place where people can play import UIKit // 元组就是将多个不同的值集合成一个数据 /* 元组是Object ...
- Asp.net 主题
设定主题: 右击网站,选择添加ASP.NET文件夹,选择主题.系统默认将文件夹命名为App_Themes,我们在这个文件夹下添加外观文件,在.skin后缀的文件中自定义我们想要的主题. 例如: < ...
- cas sso单点登录系列6_cas单点登录防止登出退出后刷新后退ticket失效报500错
转(http://blog.csdn.net/ae6623/article/details/9494601) 问题: 我登录了client2,又登录了client3,现在我把client2退出了,在c ...
- 你好,C++(39)6.4.4 依葫芦画瓢:用C++表达设计结果(下)
6.4.4 依葫芦画瓢:用C++表达设计结果 完成上面的分析与设计之后,小陈感觉已经成竹在胸胜利在望了.他知道,只要完成了程序中的类以及类之间关系的分析和设计,整个程序就相当于已经完成了一大半.接下 ...
- jQuery中的阻止默认行为
在很多元素中都存在默认行为,例如表单中的submit按钮,a标签等等.如果想要消除其中的默认行为,就需要一个事件event的方法来消除他们的默认行为. 这个方法就是event.preventDefau ...
- IIS 7.5 部署ASP.Net MVC 网站
請務必註冊 ASP.NET 4.0:若是 32 位元則是 %WINDIR%\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis -ir 1.首先确定已经安 ...
- [Python笔记]第三篇:深浅拷贝、函数
本篇主要内容:深浅拷贝,自定义函数,三目运算,lambda表达式, 深浅拷贝 一.数字和字符串 对于 数字 和 字符串 而言,赋值.浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址. import ...
- Xcode can't verify the identity of the server
当升级了苹果系统到 OS X El Captain 之后 ,打开Xcode 有时候会报错 如图 而且打开 svn 也会出类似错误 点击continue 了 下次 还会 出现 .这个很好解决 ...
- 多台web服务器之间共享session
常见的几种方法如下: 1. 写客户端Cookie的方式 当用户登陆成功以后,把网站域名.用户名.密码.token.session有效时间全部采用cookie的形式写入到客户端的cookie里面,如果用 ...
- CONTEXT MENU简介
安卓中的上下文菜单是通过长按控件元素触发的,要注意的是每次都会触发onCreateContextMenu方法: main.xml <?xml version="1.0" en ...