Мне нужна структура сериализации для D - PullRequest
5 голосов
/ 24 апреля 2009

Я ищу библиотеку D template , чтобы взять произвольную переменную и упаковать ее в переносимый комплект. Переменная может быть базовым типом значения (int, char[], real) или может быть struct или class и даже может содержать или быть ссылочным типом. Система, которая может сделать это без помощи каждого типа, была бы хороша, но я подозреваю, что это слишком много, чтобы спросить, поэтому я был бы счастлив с чем-то, что использует легкие аннотации.

Если бы ничего подобного не было, есть предложения о том, как его структурировать. Я могу придумать несколько способов сделать стерилизацию, но я не уверен, как указать аннотации.

Справочная информация: После попытки использовать веб-службы ASMX и WCF и не сравнивать их, я чувствую, что хочу попробовать свои силы в проблеме RPC.

edit: Кстати, мне все равно, какой формат в середине (XML, JASON, YAML, двоичный), если он переносимый.

Ответы [ 3 ]

3 голосов
/ 24 апреля 2009

Посмотрите на Буферы протокола Google . Возможно, вы можете использовать привязки C ++ или C напрямую или написать привязки D самостоятельно.

2 голосов
/ 24 апреля 2009

Вот основной, который я написал для D 1.x. Он был написан довольно давно, поэтому, возможно, его можно улучшить, но он работает . Фактический формат - это, в основном, двоичный порядок сетевых байтов, поэтому хранить и передавать байты безопасно.

http://gist.github.com/100885

Он не поддерживает классы или произвольные указатели. Чтобы сделать это правильно , вам нужно что-то, что запомнит, какие ссылки уже были сериализованы. Если вы ограничитесь типами значений, массивами и AA, это сработает.

Если вы хотите расширить его для поддержки классов, я бы посоветовал определить методы toStream и fromStream.

1 голос
/ 24 апреля 2009

Я рекомендую вам написать свое собственное, поскольку это полезное упражнение по шаблонированию и помогает адаптировать формат сериализации к вашим конкретным требованиям.

Возможно, вы захотите взглянуть на tools.serialize (http://dsource.org/projects/scrapple/browser/trunk/tools/tools/serialize.d) в качестве отправной точки.

[редактировать] Извините! Не понял, что это был ты! : D

...