我应该将哪个库用于作为.net webservice输入的对象序列化(意味着此web服务需要在其输入中使用xml)?
作为进一步的问题:
如果使用Non Intrusive Version(引导序列化),在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;
}
答案 0 :(得分:3)
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
成为朋友并提供成员函数serialize
。这里播放一些技巧,重载&
运算符,以便在不同方向上充当流操作符,具体取决于您是保存还是加载。对于大多数类,只需按照这种模式对所有成员变量进行操作,不要担心实际发生的事情(如果你想知道,请阅读文档)。
要实际序列化对象,只需将其流式传输到xml_oarchive
对象,该对象可以实例化以写入任何ostream
对象。
答案 1 :(得分:0)
如果您有兴趣,那么您可以查看Google提供的协议缓冲区。文档也相当不错: Here
它的性能远远优于XML。
答案 2 :(得分:0)
如何编译有关Boost序列化的示例?
g++ example.cpp -o example++
返回了很多错误(在Linux上:Ubuntu 10.10)
我找到了结果:
g++ example.cpp -lboost_serialization