2013-09-02 7 views
5

gsonはこのような優れたシリアライズ/デシリアライズツールです。 toJson関数を使用して、任意のオブジェクトのJSON表現を取得するのは本当に簡単です。gson:toJson()によって作成されたオブジェクトに関数の結果を追加する

今、javascript/jQuery内で使用するために、自分のオブジェクトのデータをブラウザに送信します。したがって、私はtoJson機能によって作成された私のStringにこの文字列を追加する方法

public String buildDomClass() 

ダイナミック/ memberless機能としての私のオブジェクト内でコード化されたオブジェクトのDOMクラスを定義する一つの追加JSON要素が必要ですか?

アイデア?

どうもありがとう

答えて

2

簡単な方法はTypeAdapterFactoryとインタフェースを組み合わせることです。あなたのメソッドのためのインタフェース

まず:

public interface MyInterface { 
    public String buildDomClass(); 
    } 

その後、工場:、

final class MyAdapter implements TypeAdapterFactory { 

    @Override 
    public <T> TypeAdapter<T> create(final Gson gson, final TypeToken<T> tokenType) { 
    final TypeAdapter<T> adapter = gson.getDelegateAdapter(this, tokenType); 

    return new TypeAdapter<T>() { 
     @Override 
     public T read(JsonReader reader) throws IOException { 
     return adapter.read(reader); 
     } 

     @Override 
     public void write(JsonWriter writer, T value) throws IOException { 
     JsonElement tree = adapter.toJsonTree(value); 

     if (value instanceof MyInterface) { 
      String dom = ((MyInterface) value).buildDomClass(); 
      JsonObject jo = (JsonObject) tree; 
      jo.addProperty("dom", dom); 
     } 

     gson.getAdapter(JsonElement.class).write(writer, tree); 
     } 
    }; 
    } 
} 

簡単に理解するためにあなたがシリアライズしたいオブジェクトがインタフェースを実装している場合、あなたはシリアライズを委任し、 DOMを保持する追加のプロパティを追加します。

あなたが知らない、あなたはこの

Gson gson = new GsonBuilder().registerTypeAdapterFactory(new MyAdapter()).create(); 
+0

偉大な答えのような工場を登録する場合には、どうもありがとう! –

関連する問題