Как автоматически генерировать JSON-сериализаторы и десериализаторы для структур / классов во время выполнения в D? - PullRequest
4 голосов
/ 21 сентября 2011

Я все еще новичок в D, но очевидная недостающая функция (для веб-разработчиков) в

http://www.digitalmars.com/d/2.0/phobos/std_json.html

- это миксин, который создает сериализаторы и десериализаторы JSON для произвольных (гнезд)) структур и классов.

т.е.

struct Dog {
  string name;
  int age;
}

struct Person {
  mixin JSON;
  string name;
  int age;
  string[] favouriteFoods;
  Dog dog;
  bool retired () { return age > 65 };
}

, затем сможет

auto p = Person("\"name\":\"Fred\",\"age\":45,\"favouriteFoods\":[\"cheese\",\"bananas\"],\"dog\":{\"name\":\"Rover\",\"age\":7}");

p.dog.name -> "rover"
p.favouriteFoods[1] -> "bananas"
p.retired() -> false

и

p.toJSON(); -> "\"name\":\"Fred\",\"age\":45,\"favouriteFoods\":[\"cheese\",\"bananas\"],\"dog\":{\"name\":\"Rover\",\"age\":7}"

Было бы это возможно при использованииразличные возможности метапрограммирования D?

Спасибо,

Крис.

1 Ответ

4 голосов
/ 21 сентября 2011

Да, это возможно (у меня есть библиотека, которая делает именно это прямо сейчас), и D довольно легко реализовать с помощью отражения во время компиляции. Вы можете прочитать по этим ссылкам:

...