Code review: JSON unmarshaller

Tyler Jameson Little beatgammit at gmail.com
Mon Oct 15 13:35:33 PDT 2012


> I'm not sure what your goal with this marshaller is but I would 
> say it's a lot harder than you think if you want to have a 
> complete serialization library. A couple of things making it 
> harder to create a fully working serialization library:

I'm basically trying to reproduce other JSON marshallers, like 
Go's, but using compile-time reflection. Go uses runtime 
reflection, which D notably does not support. I like the idea of 
compile-time reflection better anyway. There are a few things 
that would make it easier (like a __traits call like allMembers 
that excludes functions).

I use a lot of JSON, so a JSON marshaller/unmarshaller is going 
to save a lot of time, and make my code a lot cleaner.

> * Pointers

I've done this, but haven't fully tested it. Basic pointers work.

> * Array slices

I think this is handled.

> * Serializing through base class references

Doesn't __traits(allMembers, T) give everything from all super 
classes?

> * const/immutable fields

Hmm, not sure to handle this. These have to be set in the 
constructor, right?

> * Any reference type (not really hard but it's more work)

Are you talking about aliases? What other kind of reference types 
are there in structs/classes? I'm assuming this will have more to 
do with marshalling as opposed to unmarshalling.

> Have a look at for a basically fully working serialization 
> library Orange:
>
> https://github.com/jacob-carlborg/orange

Hmm, looks interesting. This looks like it only supports XML, 
which I don't use, but I'm sure you've already solved a lot of 
the corner cases. Thanks, I'll take a look!


More information about the Digitalmars-d-learn mailing list