serialization: deserialization issue
I have a base class and some derived class. Each class declare a serialize method. each derived class begin its serialization method by: inArchive & BOOST_SERIALIZATION_BASE_OBJECT_NVP (FetchableMetadataObject); to declare the inheritance relationship then they serialize their own members: inArchive & BOOST_SERIALIZATION_NVP(xxxx); I want the base class to declare a serialize as XML method that will return a string containing the serialized XML representation std::string baseClass::SerializeAsXML() const { return baseClass::saveToXML(this); } saveToXML is a static method on the baseClass std::string baseClass::saveToXML(baseClass const* inObject) { std::ostringstream returnValue; boost::archive::xml_oarchive archive(returnValue); archive << boost::serialization::make_nvp("root", inObject); return returnValue.str(); } The serialization appear to work as when the object are printed for the unit test, i pass the xml serialized data and it contains the data that i expect it to contain. The problems start when i want to reload the data into objects I declared a constructor on the base class and on the derived class that accept the XML string and then rebuild the object using that string (is that a correct design decision?) baseClass::MetadataObject(std::string const &serializedObject) { baseClass::LoadFromXML(serializedObject, this); } derivedClass::MetadataObject(std::string const &serializedObject) { baseClass::LoadFromXML(serializedObject, this); } LoadFromXML is a static method on the base class void baseClass::LoadFromXML(std::string const &inXMLString, baseClass *inObject) { std::istringstream inputStream (inXMLString); // open the archive assert(inputStream.good()); boost::archive::xml_iarchive inputArchive(inputStream); // restore the schedule from the archive inputArchive >> boost::serialization::make_nvp("root", inObject); } The serialize method is not even called when de-serializing the object. So i assume i missed something:-) Any help appreciated, Olivier Destrebecq olivierd@real.com
participants (1)
-
Olivier Destrebecq