On Fri, 04 Jun 2010 08:43:11 -0400, Robert M. Münch <robert.mue...@robertmuench.de> wrote:

On 2010-06-04 02:27:56 +0200, Robert Jacques said:

I've written a JSON serializer/de-serializer which uses compile time type reflection. Doesn't handle cycles or polymorphism yet, but I'd gladly share it if you (or others) are interested.

Thanks for the offer. AFAIK JSON is focused for wire-transfer, what I'm looking for is a way to efficiently write such structures into a file in binary form and re-create the run-time structure fast.

What I need is directed to a database / transactional system where millions of in/out operations happen.


Pretty much all serialization methods have some amount of verification overhead, which it sounds like you neither want nor need. I'd recommend directly using .tupleof for structs/classes. Here's some simplified code snippets from my JSON library:

        // From toJson(T)(T value)
        static if(is(T == struct) || is(T == class)) {
            foreach(i,v;value.tupleof) {
                result[getVariableName!(T,i)] = toJson(v);
            }
        }


        // From fromJson(T)(ref T dst)
        static if(is(T == struct) || is(T == class)) {
            static if(__traits(compiles, dst = new T() ))
                   if(dst is null)       dst = new T();
            static if(is(T == class)) enforce(dst !is null);
foreach(i,v;dst.tupleof) { // Warning V is read-only because ref v doesn't compile
                auto pJson = getVariableName!(T,i) in obj;
                if(!pJson)   continue;
                static if( is(typeof(v)==ulong) ) {
dst.tupleof[i] = roundTo!(long)(pJson.number); // Hack around bug 3418
                } else {
                    pJson.fromJson( dst.tupleof[i] );
                }
            }
        }

Reply via email to