2017-10-05 52 views
1

を使用して、子クラスオブジェクトにJSONオブジェクトを転化する私は、JavaオブジェクトにJSON文字列を変換するためのgsonを使用しています。私のアプリケーションでは、私は、子クラスを持つ1つの抽象クラスを作成しています。これは私のクラス構造です。 enter image description hereGson:どのようにgson

この場合、gsonを使用して特定のオブジェクトを作成したいとします。私は次のコードを使用して特定のJavaオブジェクトを作成しています。ここで

GsonBuilder gsonBuilder = new GsonBuilder(); 
       gsonBuilder.registerTypeAdapter(BaseClass.class, new InterfaceAdapter<BaseClass>()); 
       gsonBuilder.setPrettyPrinting(); 
       Gson gson = gsonBuilder.create(); 
    BaseClass baseClass = gson.fromJson(jsonObject.toString(),BaseClass.class); 
// Instead of this I used following function to create particular class object. 

//Optional function 
Class<BaseClass> clazz = (Class<BaseClass>) Class.forName("com.example." + "A"); 
BaseClass baseClass = gson.fromJson(jsonObject.toString(), clazz.getClass()); // This is not working for me 

は私InterfaceAdapterコードです:

public class InterfaceAdapter<T> implements JsonSerializer<T>, JsonDeserializer<T> 
{ 

    @Override 
    public JsonElement serialize(T src, Type typeOfSrc, JsonSerializationContext context) { 
     JsonObject jsonObject = new JsonObject(); 
     jsonObject.addProperty("type", src.getClass().getName()); 
     jsonObject.add("data", context.serialize(src)); 
     return jsonObject; 
    } 

    @Override 
    public T deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException 
    { 
     JsonObject jsonObject = (JsonObject) json; 
     JsonElement jsonTypeElement = get(jsonObject, "type"); 
     JsonElement dataElement = get(jsonObject, "data"); 
     final Type actualType = typeForName(jsonTypeElement); 

     return context.deserialize(dataElement, actualType); 
    } 

    private Type typeForName(final JsonElement typeElem) 
    { 
     try 
     { 
      return Class.forName(typeElem.getAsString()); 
     } 
     catch (ClassNotFoundException e) 
     { 
      throw new JsonParseException(e); 
     } 
    } 


    private JsonElement get(final JsonObject wrapper, final String memberName) 
    { 
     final JsonElement elem = wrapper.get(memberName); 

     if (elem == null) 
     { 
      throw new JsonParseException(
        "no '" + memberName + "' member found in json file."); 
     } 
     return elem; 
    } 
} 

プログラムの実行後、私は唯一のBaseClassのオブジェクトを得ました。私はA、BまたはCのオブジェクトのような特定のJavaオブジェクトを作成したいです。それは私に私が欲しい特定のJavaオブジェクトを与えられていません。私が知っている、私は何かが恋しい。だから、私は誤解どこを行う必要が出て見つけてくださいもらえますか?

public String serializeToJson(MyClass myClass) { 
    Gson gson = new Gson(); 
    String j = gson.toJson(myClass); 
    return j; 
} 

オブジェクトにデシリアライズするgsonを使用した:seralize /オブジェクトクラスをシリアル化するgsonを使用

をデシリアライズするため

+0

fromJson()メソッドのBaseClass.classではなく、A.classまたはB.classまたはC.classを使用します。 – chandil03

答えて

-1

Gsonを使用することができます。

// Deserialize to single object. 
public MyClass deserializeFromJson(String jsonString) { 
    Gson gson = new Gson(); 
    MyClass myClass = gson.fromJson(jsonString, MyClass.class); 
    return myClass; 
}