On Tue, 26 May 2009 21:44:49 +0400, Bill Baxter <wbax...@gmail.com> wrote:
> On Tue, May 26, 2009 at 2:35 AM, Denis Koroskin <2kor...@gmail.com> > wrote: >> On Tue, 26 May 2009 13:29:39 +0400, Qian Xu >> <quian...@stud.tu-ilmenau.de> >> wrote: >> >>> BCS wrote: >>> >>>> I'm planning on taking a crack at a Serialization template library and >>>> I'm >>>> looking for feed back. My thinking so far is up on my blog here: >>>> >>>> >>> >>> http://arrayboundserror.blogspot.com/2009/05/serialization-for-d-part-1-of-n.html >>>> >>>> Please comment! (here or there, doesn't matter, I think I'll see both) >>> >>> A question: >>> Should every object contain "mixin Serializable!()" in its declaration? >>> It is easy to add this in own classes, but not easy to 3rd-party >>> libraries. >>> for instance: tango >>> >>> >>> --Qian >>> >> >> Good serialization library supports external serialization via template >> specialization (or similar tricks) :) > > I'll also add that you should be able to properly > serialize/deserialize a BaseClass pointer that actually points to a > DerivedClass. > This is pretty tricky to get working seamlessly when combined with the > external serialization requirement. > H3r3tic's xpose library has this working IIRC. > > --bb Sure! How about the following test: struct A { mixin Serializable!(); B[] b; } struct B { mixin Serializable!(); A a; int i; } B[] b = new B[1]; b[0].a.b = b; b[0].i = 42; A* a = &b[0].a; data = serialize(a); // should serialize outer struct (B), too, because it is accessible through a a = deserialize(data); assert(a.b.length == 1); assert(a.b[0].i == 42); BTW, thanks for reminding about xpose. I gotta compare it, doost.serialize and mine own one against each other in terms of efficiency and size (for binary output) someday.