Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在运行时在D中为结构/类自动生成JSON序列化器和反序列化器?_Json_Serialization_D - Fatal编程技术网

如何在运行时在D中为结构/类自动生成JSON序列化器和反序列化器?

如何在运行时在D中为结构/类自动生成JSON序列化器和反序列化器?,json,serialization,d,Json,Serialization,D,我对D还是个新手,但在D中有一个明显缺失的特性(对于web开发人员而言) 是一个mixin,它为任意结构和类(嵌套)创建JSON序列化器和反序列化器 i、 e 然后才能 auto p = Person("\"name\":\"Fred\",\"age\":45,\"favouriteFoods\":[\"cheese\",\"bananas\"],\"dog\":{\"name\":\"Rover\",\"age\":7}"); p.dog.name -> "rover" p.favo

我对D还是个新手,但在D中有一个明显缺失的特性(对于web开发人员而言)

是一个mixin,它为任意结构和类(嵌套)创建JSON序列化器和反序列化器

i、 e

然后才能

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

使用D的各种元编程特性,这可能吗

谢谢

Chris。

是的,这是可能的(我现在有一个库,它在生产中正是这样做的),并且D使得使用编译时反射实现非常容易。您需要阅读以下链接:


我想我是通过回答你的最后一个问题来回答这个问题的……:PPro提示:有很多方法可以在D中分隔字符串文字,这有助于防止上面的反斜杠。尝试使用backticks(`)或q“”语法。您现在在生产中使用的是D的哪个版本?我们通常会跟踪最新的公开发行版(通常要等一两周时间尘埃落定)。所以,现在,DMD2.059。谢谢你的回答。这真令人高兴。
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}"