vibe.d beta banner
get vibe.d
0.10.1

Asynchronous I/O that doesn’t get in your way, written in D

Function serializeToJson

Serializes the given value to JSON.

Json serializeToJson(T) (
  auto ref T value
);

void serializeToJson(R, T) (
  R destination,
  auto ref T value
)
if (isOutputRange!(R, char) || isOutputRange!(R, ubyte));

The following types of values are supported:

Json
Used as-is
null
Converted to Json.Type.null_
bool
Converted to Json.Type.bool_
float, double
Converted to Json.Type.float_
short, ushort, int, uint, long, ulong
Converted to Json.Type.int_
BigInt
Converted to Json.Type.bigInt
string
Converted to Json.Type.string
T[]
Converted to Json.Type.array
T[string]
Converted to Json.Type.object
struct
Converted to Json.Type.object
class
Converted to Json.Type.object or Json.Type.null_

All entries of an array or an associative array, as well as all R/W properties and all public fields of a struct/class are recursively serialized using the same rules.

Fields ending with an underscore will have the last underscore stripped in the serialized output. This makes it possible to use fields with D keywords as their name by simply appending an underscore.

The following methods can be used to customize the serialization of structs/classes:

Json toJson() const;
static T fromJson(Json src);

string toString() const;
static T fromString(string src);

The methods will have to be defined in pairs. The first pair that is implemented by the type will be used for serialization (i.e. toJson overrides toString).

See Also

deserializeJson, vibe.data.serialization

Example

struct Foo {
	int number;
	string str;
}

Foo f;

f.number = 12;
f.str = "hello";

string json = serializeToJsonString(f);
assert(json == `{"number":12,"str":"hello"}`);
Json jsonval = serializeToJson(f);
assert(jsonval.type == Json.Type.object);
assert(jsonval["number"] == Json(12));
assert(jsonval["str"] == Json("hello"));
Authors

Sönke Ludwig

Copyright

© 2012-2015 RejectedSoftware e.K.

License

Subject to the terms of the MIT license, as written in the included LICENSE.txt file.