I don't understand how Object.factory could help with serializing. But what would help is if we did get proper runtime reflection.

All that'd be needed would be to have Object.factory working with templates, here's how:

----
unittest{
    class A{}
    class B{int x;}
    A a=new B;
auto c=serialize(a);//will serialize field "x", no need to register!B
}

auto serialize(T)(T a){
auto c=cast(SerializerBase)Object.factory("Serializer!("~typeid(a).to!string~").Serializer");
    return c.serialize(a);
}

class SerializerBase{//could also be an interface
    auto serialize(Object a){}
}

class Serializer(T):SerializerBase{
    auto serialize(Object a){
        auto b=cast(T)a;
        foreach (name; __traits(allMembers, T)) {
            //now we have access to fields of most derived type;
            //we can get the fields from base class as well.
        }
    }
}
----
I've left out details to focus on the key part. Deserialization is very similar.

So the question is: is that technically impossible or not to enhance Object.factory in such ways?


Reply via email to