5

我正在寻找一个D 模板库来获取任意变量并将其编组为可传输的包。变量可能是基本值类型 ( int, char[], real) 或者可能是一个structclass甚至可能包含或是一个引用类型。一个可以在没有任何类型帮助的情况下做到这一点的系统会很好,但我怀疑它的要求太多了,所以我会对使用轻量级注释的东西感到满意。

如果没有类似的关于如何构建的建议,那就太好了。我可以想到几种方法来进行消毒,但我不确定如何指定注释。

背景:在尝试使用 ASMX 和 WCF Web 服务并且不喜欢它们之后,我感觉我想尝试解决 RPC 问题。

编辑:顺便说一句,只要它是可移植的,我不太关心中间的格式是什么(XML、JASON、YAML、二进制)。

4

3 回答 3

3

看看谷歌协议缓冲区。也许您可以直接使用 C++ 或 C 绑定,或者自己编写 D 绑定。

于 2009-04-23T21:19:00.683 回答
2

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

http://gist.github.com/100885

它不支持类或任意指针。为了正确地做到这一点,你需要一些能记住它已经序列化的引用的东西。如果你限制自己使用值类型、数组和 AA,它就可以完成这项工作。

如果您确实想将其扩展为支持类,我的建议是要求定义 toStream 和 fromStream 方法。

于 2009-04-24T02:12:54.970 回答
1

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

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

[编辑] 对不起!没想到是你!:D

于 2009-04-23T21:12:58.513 回答