On Thursday, 24 March 2016 at 08:15:12 UTC, Andre wrote:
Hi,
I have a class which has already an alias this to a string
array,
so I can use it in a foreach loop.
class MyClass
{
string[] _data;
alias _data this;
// ...
}
void main()
{
import std.json;
auto jsValue = JSONValue(new MyClass());
}
For some generic code I need an implicit conversion of MyClass
so I can
use it for a JSONValue. For the coding above I receive a
compiler error:
static assert "unable to convert type "MyClass" to json"
JSONValue only works with the build in types, not with user
defined types. Either you define a specific function for the
class that returns a JSONValue. Easiest way to do that would be
to build an associative array with strings as keys with the
names, and JSONValues as values and turn that into JSONValue,
i.e. (untested):
class MyClass
{
string[] _data;
alias _data this;
// ...
JSONValue toJSON()
{
JSONValue[string] aa;
JSONValue[] dataJSON = _data.map!((a) => JSONValue(a)).array;
aa["data"] = JSONValue(dataJSON);
return JSONValue(aa);
}
}
Alternatively there are multiple serialization libraries that
will allow you to turn any user defined type from and to
JSONValues.
https://code.dlang.org/packages/painlessjson
https://code.dlang.org/packages/jsonizer
Cheers, Edwin