2016-11-16 12 views
0

GoogleのGson.toJson(Object src)はブール値を変換しません。例えば、私のJavaオブジェクトは言う です:Gson.toJsonはオブジェクトからブール値を変換しません

class MyObj { 
    private String name; 
    private boolean teen; 

    //getter,setter ommitted... 
    } 

MyObj obj = new MyObj(); 
obj.setName("Me"); 
obj.isTeen(false); 

Gson.toJson(obj); 

このオブジェクトを変換しますが、それはブール値があったにもかかわらず、不足している

このような
MyObj { "name" : "Me" } 

を書いています。

答えて

1

フィールドがtransientまたはstaticと定義されている場合にのみ、Gsonはフィールドをシリアル化しません。

ブールフィールドを静的または一時的なものとして定義していない場合、jsonはそのフィールドを持つ必要があります。

isTeen()メソッドを使用して値をブール値フィールドに設定する方法がわかりません。 booleanフィールドの "is"メソッドが自明でない限り、コンパイルエラーが発生するはずです。 "is"メソッドは、基本的にString /その他のフィールドの "get"メソッドと同等です。通常、値の設定には使用されません。

私はゲッターとセッターで完全なコードを提供しました。これが機能するかどうかを確認してください。

public class MyObj { 

    private String name; 

    private boolean teen; 
    public String getName() { 
     return name; 
    } 
    public boolean isTeen() { 
     return teen; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
    public void setTeen(boolean teen) { 
     this.teen = teen; 
    } 
} 

主な方法: -

public static void main(String[] args) { 

     Gson gson = new Gson(); 

     MyObj obj = new MyObj(); 
     obj.setName("Me"); 
     obj.setTeen(false); 

     System.out.println(gson.toJson(obj)); 
    } 

出力: -

{"name":"Me","teen":false} 

興味深いポイントは、あなたがブール型フィールドに任意の値を設定しない場合でも、ということです。デフォルトではが偽となり、生成されたJSONはfalseになります。

+0

はい、これはisTeen()メソッドに関する型です。それは確かにsetTeen()メソッドでした。私は実際に私のコードベースからコピーしていませんでした。ちょうどここから直接書きました。奇妙なことは、私は自分のコードを変更しなかったが、それは1日後に働き始めたことである。私はそれが初めて働かなかったとき私が非常に困惑させたので、私が逃した何を確かめなかった。 – Sujoy

+0

いいよ。コードまたはAPIに問題がないことを確認するために答えを受け入れますか?複雑なものを小さなものに分割すると、問題が他の場所にある可能性があるという手がかりを与えることがあります。 – notionquest

関連する問題