Java gson无法反序列化简单接口
我有一个非常简单的Java接口:Java gson无法反序列化简单接口,java,gson,Java,Gson,我有一个非常简单的Java接口: public interface GeographicalArea { java.lang.String getTown(); java.lang.String getProvince(); java.lang.String getStreet(); java.lang.String getStreetNumber(); float getLongitude(); float getLatitude(); java.lang.String getP
public interface GeographicalArea {
java.lang.String getTown();
java.lang.String getProvince();
java.lang.String getStreet();
java.lang.String getStreetNumber();
float getLongitude();
float getLatitude();
java.lang.String getPhoneNumber();
void setTown(java.lang.String s);
void setProvince(java.lang.String s);
void setStreet(java.lang.String s);
void setStreetNumber(java.lang.String s);
void setLongitude(float v);
void setLatitude(float v);
void setPhoneNumber(java.lang.String s);
}
通过相应的简单实现:
public class GeographicalAreaImpl implements GeographicalArea {
private java.lang.String town;
private java.lang.String province;
private java.lang.String street;
private java.lang.String streetNumber;
private float longitude;
private float latitude;
private java.lang.String phoneNumber;
public GeographicalAreaImpl() { ... [compiled code]
public java.lang.String getTown() { ... [compiled code]
... all the other getters and setters declared in the Interface
我没有它们的源代码:我在一个我需要使用的Jar中收到它们
为了反序列化我收到的java接口,我构建了一个InstanceCreator
:
public class InstanceCreatorGeographicalArea implements
InstanceCreator<GeographicalArea> {
@Override
public GeographicalArea createInstance(Type type) {
return new GeographicalAreaImpl();
}
}
但是,gson无法反序列化我接收的数据:它没有给出错误,但所有字段都保留为空/null
我不是Gson方面的专家,但从我阅读的文档来看,我做了我应该做的事情
我做错了什么?你读过这些吗:
1)
2)
?
显然,错误可能在这一行:
builder.registerTypeAdapter(geographicalreaimpl.class,新
使用实现而不是接口
在InstanceCreatorGeographicalArea中,请使用以下方法:
public GeographicalAreaImpl createInstance(类型arg0){
返回新的geographicalreaimpl();
}
测试班
public static void main(String[] args) {
GeographicalArea ga = new GeographicalAreaImpl();
ga.setLatitude(25);
ga.setLongitude(2);
ga.setPhoneNumber("2344");
ga.setProvince("xxx");
ga.setStreet("yyyyy");
ga.setStreetNumber("2");
ga.setTown("zzzzzzz");
Gson gson = new Gson();
String userJson = gson.toJson(ga);
GsonBuilder builder = new GsonBuilder();
builder.registerTypeAdapter(GeographicalAreaImpl.class, new InstanceCreatorGeographicalArea());
Gson parser = builder.create();
GeographicalArea request = parser.fromJson(userJson, GeographicalAreaImpl.class);
System.out.println("Latitude " + request.getLatitude());
}
输出:
Latitude 25.0
InstanceCreatorGeographicalArea类::
public class InstanceCreatorGeographicalArea implements InstanceCreator<GeographicalAreaImpl> {
@Override
public GeographicalAreaImpl createInstance(Type arg0) {
return new GeographicalAreaImpl();
}
公共类InstanceCreator地理区域实现InstanceCreator{
@凌驾
public GeographicalAreaImpl createInstance(类型arg0){
返回新的geographicalreaimpl();
}
}请添加更多关于您的链接所包含内容的详细信息。不,我没有阅读这些内容,但现在我有了:我找不到解决问题的提示。它们是否包含解决方案?更准确地说,我用java代码测试编辑了我的答案。希望它有帮助。它不起作用。可能我应该指定地理区域是我正在反序列化的另一个对象的实例成员。
public class InstanceCreatorGeographicalArea implements InstanceCreator<GeographicalAreaImpl> {
@Override
public GeographicalAreaImpl createInstance(Type arg0) {
return new GeographicalAreaImpl();
}