2013-07-28 1 views
3

Я пытаюсь использовать TypeAdapterFactory для сериализации и десериализации некоторых объектов клиента. Я хотел бы сериализовать все объекты определенного типа во время выполнения.Deserialize для ввода во время выполнения

public <T> TypeAdapter<T> create(final Gson gson, final TypeToken<T> tokenType) 
{ 
    final TypeAdapter<T> delegate = gson.getDelegateAdapter(this, tokenType); 
    final TypeAdapter<JsonElement> elementAdapter = gson.getAdapter(JsonElement.class); 

    return new TypeAdapter<T>() 
     { 
      @Override 
      public T read(JsonReader reader) throws IOException 
      { 
       Class<?> clazz = Class.forName(classpath); 
       JsonObject jsonObject = elementAdapter.read(reader).getAsJsonObject(); 

       // Here I want to return an instance of clazz 
      } 

      @Override 
      public void write(JsonWriter writer, T value) throws IOException 
      { 
      } 
     }; 
} 

Как бы я это сделал?

ответ

1

Вы можете попробовать что-то вроде этого (код не будет компилироваться, вам нужно поймать исключения). Возможно, есть и более синтаксис для THIS.

final class MyClass implements TypeAdapterFactory { 
    @Override 
    public <T> TypeAdapter<T> create(final Gson gson, final TypeToken<T> tokenType) { 
    final MyClass THIS = this; 

    return new TypeAdapter<T>() { 
     @Override 
     public T read(JsonReader reader) throws IOException { 
     Class<?> clazz = Class.forName(classpath); 

     TypeToken<T> token = (TypeToken<T>) TypeToken.get(clazz); 
     TypeAdapter<T> adapter = gson.getDelegateAdapter(THIS, token); 
     JsonElement tree = gson.getAdapter(JsonElement.class).read(reader); 
     T out = adapter.fromJsonTree(tree); 

     return out; 
     } 

     @Override 
     public void write(JsonWriter writer, T value) throws IOException { 
     } 
    }; 
    } 
} 
Смежные вопросы