#include #include #include #include #include #include #include #include #include struct MyString { std::string s_; }; namespace boost { namespace serialization { template void serialize(Archive& ar, MyString& ms, unsigned int const /*version*/) { ar & ms.s_; } } // namespace serialization } // namespace boost #if 1 typedef boost::archive::xml_oarchive oarchive; typedef boost::archive::xml_iarchive iarchive; //BOOST_CLASS_IS_WRAPPER(std::string) // Why is it required? #else typedef boost::archive::text_oarchive oarchive; typedef boost::archive::text_iarchive iarchive; #endif class Model { friend class boost::serialization::access; template void serialize(Archive& ar, unsigned int const /*version*/) { ar & BOOST_SERIALIZATION_NVP(ms_); } MyString ms_; }; int main() { { Model m; std::ofstream ofs("foo.xml"); oarchive oa(ofs); oa << boost::serialization::make_nvp("Model", m); } { Model m; std::ifstream ifs("foo.xml"); iarchive ia(ifs); ia >> boost::serialization::make_nvp("Model", m); } }