我目前正在尝试在D中编写一个程序,当调用并传递一个对象时,它会将对象序列化为XML文档。我想让它像传递对象一样简单,但我不能完全确定它可以完成。 示例:
class A
{
//Constructors and fluff
....
int firstInt;
int secondInt;
}
.....
A myObj = new A();
XMLSerialize(myObj);
,输出为
<A.A>
<firstInt></firstInt>
<secondInt></secondInt>
</A.A>
那么,我是否有可能在对象内部获取变量的名称,或者是否必须手动完成?
答案 0 :(得分:6)
代码胜过千言万语(故意简化):
import std.stdio;
void print(T)(T input)
if (is(T == class) || is(T == struct))
{
foreach (index, member; input.tupleof)
{
writefln("%s = %s", __traits(identifier, T.tupleof[index]), member);
}
}
struct A
{
int x, y;
}
void main()
{
print(A(10, 20));
}
答案 1 :(得分:1)
.stringof
返回一个包含变量名称的字符串。
void main()
{
int some_int;
assert(some_int.stringof == "some_int");
}
答案 2 :(得分:1)
stingof不是合适的答案。 std.traits中有一些东西可以做更多你期望的事情。这有点像你想做的一般,但是你可以使用编译时反射为你想要的任何类生成序列化器。
https://github.com/msgpack/msgpack-d这样做。
此外:
https://github.com/Orvid/JSONSerialization/blob/master/JSONSerialization/std/serialization/xml.d