compile time introspection and code generation - automatically serialize to json

Robert Clipsham robert at octarineparrot.com
Thu Jul 21 01:19:05 PDT 2011


On 21/07/2011 08:57, Tobias Pankrath wrote:
> Hi everyone,
>
> I'm taking a look at D again and asked myself, if
> it is possible to write a template mixin or something
> similiar that automatically serializes an object to json.
>
> For example:
>
> class MyClass
> {
>      string memberA;
>      int memberB;
>      MyClass memberC;
>      mixin ToJson!MyClass;
> }
>
> should make possible to automatically output
> "someid" { "memberA" : "somestring",
> 	"memberB" : 12,
> 	memberC : "someotherid"};
>
> How could this be accomplished? I've found std.traits
> RepresentationTypeTupel but don't see how this would
> help me.
>
> Thanks,
>
> Tobias
>
>

Something like this is very possible, here's a start for you (untested, 
sorry about the awkward indentation):

----
mixin template ToJson(T)
{
   string toJson()
   {
     foreach (i, member; T.tupleof)
     {
         enum memberName = T.tupleof[i].stringof[
				T.stringof.length + 3 .. $
				];
         writefln("%s : %s", memberName, member);
     }
     assert(0, "Eventually this should return a json string, "
               "but for now it just asserts");
   }
}
someInstanceOfMyClass.toJson();
----

I'll leave it at this and leave you to figure out the rest - just ask if 
you get stuck :)

-- 
Robert
http://octarineparrot.com/


More information about the Digitalmars-d-learn mailing list