我有点问题。 我将一些数据存储在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接口设置此值?
答案 0 :(得分:0)
我在问题http://technology.finra.org/code/serialize-deserialize-interfaces-in-java.html上找到了一个简单的解决方案。使用模板InterfaceAdapter,每个类名将在json文件中另外存储。所以检索方法,恢复类知道确切的类而不仅仅是接口。这对我很有用。