我试图使用 TypeAdapterFactory 来序列化和反序列化一些客户对象。我想在运行时将所有对象序列化为一个特定的类型。
所以给定一个 String classpath 和一个 JsonObject对象我想将对象反序列化为 Class.forName(classpath)的实例。
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); 返回新的TypeAdapter< T>() { @Override public T read(JsonReader reader)抛出IOException { Class< ;?> clazz = Class.forName(classpath); JsonObject jsonObject = elementAdapter.read(reader).getAsJsonObject(); //这里我想返回一个clazz实例 $ b @Override public void write(JsonWriter writer,T value)throws IOException {} }; }我会怎么做? <您可以尝试这样的事情(代码不会编译,您需要捕获异常)。解决方案您可以尝试这样的事情(代码不会编译,您需要捕获异常)。也许有更好的语法 THIS 。
实现TypeAdapterFactory { @Override public< T> TypeAdapter< T> create(final Gson gson,final TypeToken< T> tokenType){ final MyClass THIS = this; 返回新的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); 退出; } @Override public void write(JsonWriter writer,T value)throws IOException {} }; } }
I am trying to use TypeAdapterFactory to serialize and deserialize some customer objects. I would like to serialize all the objects to a particular type at runtime.
So given a String classpath and a JsonObject object I would like to deserialize the object to an instance of Class.forName(classpath).
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 { } }; }How would I go about this?
解决方案You can try something like this (code wont compile, you need to catch exceptions). Maybe there is a better syntax for THIS too.
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 { } }; } }
更多推荐
反序列化以在运行时键入
发布评论