GSON InstanceCreator设置数据

时间:2016-09-07 10:12:41

标签: java json interface gson

我有点问题。 我将一些数据存储在json文件中,并且工作正常。 但是,如果我尝试检索这些数据,我试图创建的对象的接口存在问题。 这是我班级的简化版本

public class MyObject{ 

//this is a interface 
public Vector3Int position;
...}

好的,GSON无法在没有consturctor的情况下创建接口,所以我创建了这个类:

public class VectorInstanceCreator implements InstanceCreator<Vector3Int >{

  @Override
   public Vector3Int createInstance(Type arg0) {
        return new VectorImpl();
   }

}

我以这种方式使用它:

    ...
    GsonBuilder gsonBuilder = new GsonBuilder();
    gsonBuilder.registerTypeAdapter(Vector3Int.class, new new VectorInstanceCreator());
    Gson gson = gsonBuilder.create();
    gson.fromJson(myJsonString, MyObject.class);
    ...

所以,它可以工作,但我的json文件中的值是例如:

"position": {"x": 1.0, "y": 1.0,"z": 0.0} 

但是Java-Object-Vector中的每个值都是0.所以这意味着,gson只使用我的VectorInstanceCreator类的给定consturctor,但是没有设置JSON-File / Object的值。

如何使用InstanceCreator接口设置此值?

1 个答案:

答案 0 :(得分:0)

我在问题http://technology.finra.org/code/serialize-deserialize-interfaces-in-java.html上找到了一个简单的解决方案。使用模板InterfaceAdapter,每个类名将在json文件中另外存储。所以检索方法,恢复类知道确切的类而不仅仅是接口。这对我很有用。