#### Serializing GVariants [src]

# Serializing GVariants

`GVariant` is a serialization format mainly used as the wire data for D-Bus, as well as storing values in GSettings. JSON-GLib provides utility functions to serialize and deserialize `GVariant` data to and from JSON.

Use `json_gvariant_serialize()` and `json_gvariant_serialize_data()` to convert from any `GVariant` value to a `JsonNode` tree or its string representation.

Use `json_gvariant_deserialize()` and `json_gvariant_deserialize_data()` to obtain the `GVariant` value from a `JsonNode` tree or directly from a JSON string.

Since many `GVariant` data types cannot be directly represented as JSON, a `GVariant` type string (signature) should be provided to these methods in order to obtain a correct, type-contrained result. If no signature is provided, conversion can still be done, but the resulting `GVariant` value will be “guessed” from the JSON data types using the following rules:

Strings: A JSON string maps to a GVariant string `(s)`.

Integers: A JSON integer maps to a GVariant 64-bit integer `(x)`.

Booleans: A JSON boolean maps to a GVariant boolean `(b)`.

Numbers: A JSON number maps to a GVariant double `(d)`.

Arrays: A JSON array maps to a GVariant array of variants `(av)`.

Objects: A JSON object maps to a GVariant dictionary of string to variants `(a{sv})`.

`NULL` values: A JSON `null` value maps to a GVariant “maybe” variant `(mv)`.