diff --git a/data/vibe/data/json.d b/data/vibe/data/json.d index c77bfbdd28..a2ebc746c9 100644 --- a/data/vibe/data/json.d +++ b/data/vibe/data/json.d @@ -1077,7 +1077,7 @@ struct Json { private void checkType(TYPES...)(string op = null) const { bool matched = false; - foreach (T; TYPES) if (m_type == typeId!T) matched = true; + foreach (T; TYPES) if (m_type == typeId!T || (is(T == string) && m_type == Type.null_)) matched = true; if (matched) return; string name; @@ -2501,3 +2501,16 @@ private auto trustedRange(R)(R range) assert(b.foos[0].i == 2); assert(b.foos[0].foos.length == 0); } + +@safe unittest { // null string deserialization + static struct Foo { @optional string bar; } + auto f = deserializeJson!Foo(`{"bar":null}`); + assert(f.bar is null); + + auto j = parseJsonString(`{"bar":null}`); + assert(j["bar"].get!string is null); + + auto pv = "bar" in j; + auto v = deserializeJson!string(*pv); + assert(v is null); +}