【问题标题】:Json-glib serialize a boolean with value false when using gobject_serialize使用 gobject_serialize 时,Json-glib 序列化值为 false 的布尔值
【发布时间】:2020-08-30 10:24:30
【问题描述】:

我正在尝试序列化下面的类:

public class Person : GLib.Object {
    public string name { get; set; }
    public int age { get; set; }
    public bool alive { get; set; }

    public Person (string name, int age, bool alive = true) {
        Object (
            name: name,
            age: age,
            alive: alive
        );
    }
}

public int main () {
    var person = new Person ("mike", 33, false);
    var node = Json.gobject_serialize (person);

    string obj = Json.to_string (node, true);
    print (obj+"\n");

    return 0;
}

虽然我希望输出是......

{
    "name": "mike",
    "age": 32,
    "alive": false
}

我明白了……

{
  "name": "mike",
  "age": 32
}

即使值为 false,我如何获得布尔序列化?

【问题讨论】:

  • 它确实适用于var person = new Person ("mike", 33, true);,所以问题似乎在于使用值为 false 的布尔值,我没有进一步调查错误可能在哪里
  • 好像在json-glib Issue 47讨论过这个问题

标签: vala


【解决方案1】:

json-glib 的默认序列化函数不会序列化包含默认值的属性。对于布尔属性,这是false,除非另有明确说明。

为确保在这种情况下确实发生了序列化,您应该自己显式实现Serializable.serialize_property() 方法。

【讨论】:

    猜你喜欢
    • 2019-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多