2012-05-08 4 views
0
私はGsonのAPIを使用して作成されています

クラスのよう:Gson JsonObjectグローバル変数

Person person = new Person(); 
person.name = "Charles" 
person.someInfo = new JsonObject(); 
person.someInfo.addProperty("key1","value1"); 
Gson gson = new Gson(); 
String jsonStr = gson.toJson(person); 

私はメンバーの内部情報を取得:

public class Person 
{ 
    private String name; 
    private JsonObject someInfo; 

    public Person() 
    { 
    } 
} 

私が使用して、このクラスのインスタンスをserealizeときプロパティ:

{"members":{"name":"Charles","someInfo":{"key1":"value1"}}} 

人のクラスsomeInfoグローバル変数を代わりにJsonElementとして宣言すると気付きましたJsonObjectの情報が正しく表示されます。

JsonObjectを使用して情報を秘匿する方法はありますか?私は何を期待

は次のようになります。Person変数にアクセスするための適切なゲッター/セッターを使用する方が良いでしょうが、

public class Person 
{ 
    private String name; 
    private Map<Object, Object> someInfo; 

    public Person() 
    { 
    } 

} 

Person person = new Person(); 
person.name = "Charles"; 
person.someInfo = new HashMap<Object, Object>(); 
person.someInfo.put("key1","value1"); 

{"name":"Charles","someInfo":{"key1":"value1"}} 
+0

コードが機能しません。 JsonObjectにStringを割り当てることはできません! –

+0

また、あなたが期待するものを見せてください。私たちはそれが何であるかを知りません_情報が正しく表示されています._ –

+0

私はこのコードを急いでここに書きました...既に編集済み – RedEagle

答えて

0

があなたのsomeInfoのための地図を使用します。

+0

これは私が以前に使っていたものです...私が本当にやりたいことはGsonのクラスを使用してください – RedEagle

+0

@RedEagleなぜJSonObject/JsonElement/JSonArrayなどで置き換えるのですか?これらは、TypeAdapterを記述していない限り、操作する必要のない低レベルのオブジェクトです。マップの使用は、要素の構造を事前に把握していない場合には正しい方法です。 –

+0

GSONは非常に強力ですが、ベースクラスにMapとList(JsonArrayの代わりに)が提供するいくつかの機能が欠けているので、あなたが正しいと思っています。 – RedEagle

2

私はGson 2.2.2を使用して同じ問題を抱えていました。

私がGson 2.2.3にアップグレードしたとき、私はJsonObjectをシリアル化するときに期待されるJSONを得ました。

+0

アップグレードが動作します。ありがとう。 –