c++ - Linux -> C++ 代码 : Object Serialization

标签 c++ xml serialization

对于作为 .net web 服务输入的对象序列化,我应该使用什么库(这意味着该 web 服务在其输入中需要一个 xml)?

作为进一步的问题:

如果使用Non Intrusive Version(Boot Serialization),那么在xml文件中写的具体代码是什么? (oa<<?)。我已经尝试了一些解决方案,但似乎我有错误。我实际上不能说 oa<< g. .

代码如下:

#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <dlfcn.h>
#include <iostream>
#include <fstream>

class gps_position
{
public:
    int degrees;
    int minutes;
    float seconds;
    gps_position(){};
};

namespace boost { namespace serialization {

    template<class Archive>
    void serialize(Archive & ar, gps_position & g, const unsigned int version)
    {
        ar & g.degrees;
        ar & g.minutes;
        ar & g.seconds;
    }    

} } // namespace boost::serialization

// gps_position g;

int main() {

    gps_position obj;
    std::ofstream ofs("filename2.xml");

    if(ofs.good()) {
        //const gps_position g;

        try {
            boost::archive::xml_oarchive oa(ofs);

            // what to write in the xml?
            oa << ??????????????????;

        } catch(boost::archive::archive_exception& ex) {

        }
    } 
    return 0;
}

最佳答案

Boost Serialization将 C++ 对象序列化为 XML 流。我不知道它是否会自动与您的网络服务兼容。

回复评论: 这是一个例子:

#include <boost/serialization/vector.hpp> 
#include <boost/archive/xml_oarchive.hpp> 
#include <fstream>

class myclass
{
    //...
private: 
    int var1;
    double var2;
    std::vector<int> var3;

    friend class boost::serialization::access;
    template<class Archive>
    void serialize(Archive & ar, const unsigned int version)
    {
        ar & BOOST_SERIALIZATION_NVP(var1);
        ar & BOOST_SERIALIZATION_NVP(var2);
        ar & BOOST_SERIALIZATION_NVP(var3); 
    }
};

//...

myclass myobject;

//...

ofstream ofs("filename.xml");
if(ofs.good()) {
    try {
        boost::archive::xml_oarchive oa(ofs);
        oa << BOOST_SERIALIZATION_NVP(myobject);
    }catch(boost::archive::archive_exception& ex){
        //...
    }
} 

基本上在您的类中,您需要使 boost::serialization::access 成为 friend 并提供成员函数 serialize。此处使用了一些技巧,重载 & 运算符以根据您是保存还是加载来充当不同方向的流运算符。对于大多数类,只需对所有成员变量都遵循此模式,而不必担心实际发生了什么(如果您想知道,请阅读文档)。

要实际序列化对象,您只需将其流式传输到一个 xml_oarchive 对象,该对象可以实例化以写入任何 ostream 对象。

关于c++ - Linux -> C++ 代码 : Object Serialization,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4444277/

相关文章:

c++ - Boehm 垃圾收集器中的精确模式

python - 在 xpath 上的过滤器后使用索引

xml - XML 节点的合并

c# - Silverlight C# 是否有将集合转换为文件以及相反的标准方法?

java - ObjectInputStream.readObject() 断开连接时不抛出异常

c++ - 在模板派生类中禁用方法覆盖

c++ - 使用 C++ 的 VS6 和 VS2008 之间的数值精度差异?

c++ - 递归返回完整值

java - 在 View 上画一个圆圈(android)

java - Hazelcast 的 IScheduledExecutorService 无法序列化任务