Serializing GBoxed Types [src]

Serializing GBoxed Types

GLib’s GBoxed type is a generic wrapper for arbitrary C structures.

JSON-GLib allows serialization and deserialization of a boxed type by registering functions mapping a JsonNodeType to a specific GType.

When registering a boxed type you should also register the corresponding transformation functions, e.g.:

GType
my_struct_get_type (void)
{
  static GType boxed_type = 0;

  if (boxed_type == 0)
    {
      boxed_type =
        g_boxed_type_register_static (g_intern_static_string ("MyStruct"),
                                      (GBoxedCopyFunc) my_struct_copy,
                                      (GBoxedFreeFunc) my_struct_free);

      json_boxed_register_serialize_func (boxed_type, JSON_NODE_OBJECT,
                                          my_struct_serialize);
      json_boxed_register_deserialize_func (boxed_type, JSON_NODE_OBJECT,
                                            my_struct_deserialize);
    }

  return boxed_type;
}

The serialization function will be invoked by json_boxed_serialize(): it will be passed a pointer to the C structure and it must return a JsonNode. The deserialization function will be invoked by json_boxed_deserialize(): it will be passed a JsonNode for the declared type and it must return a newly allocated C structure.

It is possible to check whether a boxed type can be deserialized from a specific JsonNodeType, and whether a boxed can be serialized and to which specific JsonNodeType.