を使用して、子クラスオブジェクトにJSONオブジェクトを転化する私は、JavaオブジェクトにJSON文字列を変換するためのgson
を使用しています。私のアプリケーションでは、私は、子クラスを持つ1つの抽象クラスを作成しています。これは私のクラス構造です。 Gson:どのように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を使用
をデシリアライズするため
fromJson()メソッドのBaseClass.classではなく、A.classまたはB.classまたはC.classを使用します。 – chandil03