I need a way to convert  data structures to strings, in a way that is robust with respect to different versions of Ocaml.
What I need to translate are mostly mixes of tuples, lists and variant types.  A typical example of data to marshal/pickle may look like:

(3.4, [Move (4, 3, 5); Del (4, 2); Ins (4, 2)], "an example")

I heard that the marshaling of the module Marshal is not robust with respect to changes in the version of Ocaml, and since I need to insert the data in a database for long-term use, this is a serious drawback. I need the marshaling and unmarshaling to be completely independent from the version of Ocaml, and from the particular architecture where the marshaling occurs.
I could of course write my own solution, but I am wondering if there are any suitable modules  available that I could use.

Many thanks!

Luca