使用Gson将字符串解析为对象。布尔值始终为false。

4

我从服务器获取了一个Json字符串:

{"erfolgreich":"true","id":"14"}

当我调用

//result is the string above
msgServer = gson.fromJson(result, MsgSpielerErstellenSA.class);

布尔值始终为false...

我做错了什么?

这是我的MsgSpielerErstellenSA:

public class MsgSpielerErstellenSA {

    private long id;
    private boolean isErfolgreich;

    public MsgSpielerErstellenSA(long id, boolean isErfolgreich) {
        super();
        this.id = id;
        this.isErfolgreich = isErfolgreich;
    }


    public boolean isErfolgreich() {
        return isErfolgreich;
    }

    public void setErfolgreich(boolean isErfolgreich) {
        this.isErfolgreich = isErfolgreich;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }


}

1
你尝试过将布尔值作为布尔值而不是字符串返回吗?像这样:{"erfolgreich":true,"id":"14"} - Thomas Bouron
2个回答

5

因为布尔字段的正确名称是erfolgreich,而不是isErfolgreich。请使用以下类:

public class MsgSpielerErstellenSA {

    private long id;
    private boolean erfolgreich;

    public MsgSpielerErstellenSA(long id, boolean isErfolgreich) {
        this.id = id;
        this.erfolgreich = isErfolgreich;
    }


    public boolean isErfolgreich() {
        return erfolgreich;
    }

    public void setErfolgreich(boolean isErfolgreich) {
        this.erfolgreich = isErfolgreich;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }
}

但如果您不想更改此字段名称,您可以在其上使用@SerializedName("erfolgreich")注释


你是对的。我没有意识到这一点,因为服务器端的布尔值也被称为isErfolgreich。服务器刚刚改成erfolgreich。但是为什么?因为有一个布尔值和一个同名的方法吗? - Bolic
@Bolic,拥有相同名称的字段和方法是可以的,这不是更改的原因。 - nikis

1
您的JSON字符串中键名"erfolgreich"应与类数据成员"isErfolgreich"相同,或者在定义成员之前使用@SerializedName标注。如果Gson无法将类成员和JSON键匹配,则使用该成员类型的默认值。因此,您可以使用nikis的解决方案,也可以使用类似于以下的标注:
@SerializedName("erfolgreich")
private boolean isErfolgreich;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接