我正在尝试使用这个库来序列化我编写的类。Valadoc : gobject_to_data。
假设我有一个这样写的类:
public class MyObject : Object {
public string property_name { get; set; }
public MyObject (string str) {
this.property_name = property_name;
}
}
public static int main (string[] args) {
MyObject obj = new MyObject ("my string");
string data = Json.gobject_to_data (obj, null);
print (data);
print ("\n");
return 0;
}
我看到的输出是:
{
"property-name" : "my string"
}
我想做的是修改属性名称,而不是在“蛇的情况下”:
{
"property_name" : "my string"
}
我该怎么做?
我试着从Serializable
接口实现serialize_property
,如下所示:
public class MyObject : Object : Json.Serializable {
public string property_name { get; set; }
public MyObject (string str) {
this.property_name = property_name;
}
public Json.Node serialize_property(string property_name, Value value, ParamSpec pspec) {
string property_name_camel_case = property_name.replace("-", "_");
Json.Node value_node = new Json.Node(Json.NodeType.VALUE);
value_node.set_value(value);
Json.Object final_object = new Json.Object();
final_object.set_member(property_name_camel_case, value_node);
return value_node;
}
}
public static int main (string[] args) {
MyObject obj = new MyObject ("my string");
string data = Json.gobject_to_data (obj, null);
print (data);
print ("\n");
return 0;
}
但是,我仍然收到这样的输出:
{
"property-name" : "my string"
}
1条答案
按热度按时间pzfprimi1#
如果其他人正在寻找这个答案
遗憾的是,JSON序列化不支持非规范名称see here。在实现
Json.Serializable.list_properties
时,仍然不能创建任何具有非规范名称的ParamSpec
。因此,我不得不构建一个
Json.Object
,并手动设置每个键值对,如下所示: