对于作为 .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/