Vala makes working with GLib.Value very easy, it will implicitly convert between GLib.Value and the native types. Throwing GLib.StringBuilder into the mix to build your array, something like this (untested) should do the trick:
GLib.StringBuilder s = new GLib.StringBuilder ();
s.append (((uint64) st).to_string ());
s.append (",[");
{
bool first = true;
foreach ( unowned GLib.Value value in rms.values ) {
if (!first) {
s.append_c (',');
} else {
first = false;
}
s.append (((double) value).to_string ());
}
}
s.append_c (']');