Requirements
- Code Portability - Has to work on Linux, Windows, etc.
- Data Portability - Serialized data must be readable on different systems. For binary data it should be possible to use Network-Byte-Order etc.
- Easy to use - The overhead to add serialization to a class must be small
- Light weight - Serialization should not require to inherit a certain class, and if a class must be inherited it should not add any members or other overhead to the classes.
- "Deep" serialization of pointers - the framework has to "follow" pointers in order to serialize/deserialize the underlying objects. It must be possible the restore multiple pointers that point to the same single object
- Serialization of STL-containers, boost-shared-pointers, etc.
- Non-Intrusive: It must be possible to serialize a class without needing to make any changes to the existing code of the class, e.g. classes that are provied by external libraries
- Support of versioning, default values, etc
- Must be able to read and write in human-readable formats
- Should support properties, i.e. changing member values at runtime.