我需要一个D的序列化框架

时间:2009-04-23 20:56:21

标签: serialization metaprogramming rpc d

我正在寻找一个D 模板库来获取一个任意变量并将其编组到一个可传输的包中。变量可能是基本值类型(intchar[]real),也可能是structclass,甚至可能包含或是参考类型。一个可以在没有任何类型帮助的情况下执行此操作的系统会很好但是我怀疑这要求很多,所以我会对使用轻量级注释的东西感到高兴。

如果不存在这样的建议就如何构建它会很好。我可以想到几种方法来进行消毒,但我不确定如何指定注释。

背景:在尝试使用ASMX和WCF Web服务而不是将它们比作之后,我感觉像是想要尝试解决RPC问题。

编辑: BTW我不在乎中间的格式是什么(XML,JASON,YAML,二进制),只要它是可移植的。

3 个答案:

答案 0 :(得分:3)

看看Google Protocol Buffers。也许你可以直接使用C ++或C绑定,或自己编写D绑定。

答案 1 :(得分:2)

这是我为D 1.x写的一个基本的。它是在很久以前写的,所以有可能改进它,但它 工作。实际格式基本上是网络字节顺序二进制,因此存储和传输字节应该是安全的。

http://gist.github.com/100885

它不支持类或任意指针。为了正确地 ,你需要记住它已经序列化的引用。如果你将自己局限于值类型,数组和AA,它就可以完成这项工作。

如果你想将它扩展到支持类,我的建议是要求定义toStream和fromStream方法。

答案 2 :(得分:1)

我建议您自己编写,因为它是一个有用的模板练习,可以帮助您根据具体要求调整序列化格式。

您可能需要查看tools.serialize(http://dsource.org/projects/scrapple/browser/trunk/tools/tools/serialize.d)作为起点。

[编辑]抱歉!没意识到这是你! :d