boost 序列化成 xml文件

#include "stdafx.h"

#include <boost/archive/xml_oarchive.hpp>
#include <boost/archive/xml_iarchive.hpp>
#include <boost/serialization/map.hpp>
#include <fstream>
#include <iostream>

class TestClass
{
public:
    TestClass()
    {
        m_cMember1 = 'm';
        m_strMemberName = "Hello.";
        m_nData = 1;
    }

    char m_cMember1;
    std::string m_strMemberName;
    int m_nData;

    // 串行化的函数,这一个函数完成对象的保存与恢复
    template<class Archive>
    void serialize(Archive& ar, const unsigned int version)
    {
        // 注意这个宏(变量名存储进去, XML文件的节点将作为节点的名称)
        ar & BOOST_SERIALIZATION_NVP(m_cMember1);
        ar & BOOST_SERIALIZATION_NVP(m_strMemberName);
        ar & BOOST_SERIALIZATION_NVP(m_nData);
    }
};

typedef std::map<std::string, TestClass> MapTestClass;

int _tmain(int argc, _TCHAR* argv[])
{
    MapTestClass mapTestClass;
    /
    // 读取xml文件中的数据
    //读取Member.xml文件以初始化表示用户信息的m_mapUserinfo
    std::ifstream fin("./abc.xml");
    if (fin)
    {
        boost::archive::xml_iarchive ia(fin);           // 文本的输入归档类
        // 注意这一段宏, 在读操作时mapTestClass的命名无所谓,
        // 估计boost库中会查找与该结构"匹配"的数据来读写
        ia >> BOOST_SERIALIZATION_NVP(mapTestClass);    // 恢复到m_mapUserinfo对象
        fin.close();
        return 0;
    }

    /
    mapTestClass["justTest"].m_strMemberName = "test----";

    /
    // 写入数据
    std::ofstream fout("./abc.xml");
    if (fout)
    {
        // 注意这一段宏, 在读操作时mapTestClass的命名无所谓,
        // 估计boost库中会查找与该结构"匹配"的数据来读写
        // 但在写入文件时, 如果mapTestClass这个命名有一些特殊符号
        // 例如: ::mapTestClass, *mapTestClass , 此时写入数据就会
        // 报错, 因为*mapTestClass传入时, xml的节点的名称就是
        // "*mapTestClass"了, 这样会造成异常
        boost::archive::xml_oarchive oa(fout);          // 文本的输出归档类,使用一个ostream来构造
        oa << BOOST_SERIALIZATION_NVP(mapTestClass);    // 保存obj对象
        fout.close();                                   // 关闭文件
        return 0;
    }

    system("pause");
    return 0;
}

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE boost_serialization>
<boost_serialization signature="serialization::archive" version="5">
<mapTestClass class_id="0" tracking_level="0" version="0">
 <count>1</count>
 <item_version>0</item_version>
 <item class_id="1" tracking_level="0" version="0">
  <first>justTest</first>
  <second class_id="2" tracking_level="0" version="0">
   <m_cMember1>109</m_cMember1>
   <m_strMemberName>test----</m_strMemberName>
   <m_nData>1</m_nData>
  </second>
 </item>
</mapTestClass>

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/cay22/archive/2009/07/28/4386394.aspx

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值