Java Genson 1.4(JSON)不处理继承的Pojo';s

Java Genson 1.4(JSON)不处理继承的Pojo';s,java,json,rest,inheritance,genson,Java,Json,Rest,Inheritance,Genson,我在REST实现中使用genson 1.4进行JSON处理,使用genson时JSON继承不起作用。请查找下面的示例代码结构 这是我的基本目标 This is my BaseObject public class SynBaseObject implements Serializable { private Long status; //GettersAndSetters } 这是我的孩子班 public class PhoneNumber extends SynBaseObject {

我在REST实现中使用genson 1.4进行JSON处理,使用genson时JSON继承不起作用。请查找下面的示例代码结构

这是我的基本目标

This is my BaseObject

public class SynBaseObject implements Serializable
{
 private Long status;
//GettersAndSetters
}
这是我的孩子班

public class PhoneNumber extends SynBaseObject
{
private  String      countryCode;
private  String      areaCode;
private  String      localNumber;
//GettersAndSetters
}
这是我的回应对象

public class ResponseObject  implements Serializable
{ 
private Integer errorCode;
private String errorMessage;
private Long    primaryKey;

private SynBaseObject baseClass;

public ResponseObject()
{

}

public SynBaseObject getBaseObject()
{
return baseClass;
}

public void setBaseObject(SynBaseObject baseClass)
{
this.baseClass = baseClass;
}

public Integer getErrorCode()
{
return errorCode;
}

public void setErrorCode(Integer errorCode)
{
this.errorCode = errorCode;
}
}

这是GENSON JSON输出:

{“baseObject”:{“status”:null},“errorCode”:null,“errorMessage”:null,“primaryKey”:null}

JSON中缺少
CountryCode
areaCode
localNumber
,只处理基类。请在类似这样的代码中尝试相同的方法

    Genson genson = new Genson();
    PhoneNumber number = new PhoneNumber();
    number.setCountryCode("2");
    number.setAreaCode("3");
    number.setLocalNumber("9645");
    ResponseObject responseObject = new ResponseObject();
    responseObject.setBaseObject(number);
    String serialize = genson.serialize(responseObject);
    System.out.println(serialize);

输出与rest服务中的输出相同。

默认情况下,Genson在ser/de期间使用静态类型。这意味着在这里,它将对象视为SynBaseObject的实例,而不是具体类型PhoneNumber

您可以通过配置告诉Genson使用运行时类型:

Genson genson = new GensonBuilder().useRuntimeType(true).create();
在这里你可以找到一些关于如何使用的例子

请注意,如果您曾经想要反序列化到ResponseObject,那么您可能会遇到问题,因为在json中没有关于基对象的具体类型的信息。但是,如果使用的json也是由Genson生成的,则可以通过启用类元数据序列化
builder.useClassMetadata(true)
轻松解决此问题


有关Genson中类型的更多文档。

默认情况下,Genson在ser/de期间使用静态类型。这意味着在这里,它将对象视为SynBaseObject的实例,而不是具体类型PhoneNumber

您可以通过配置告诉Genson使用运行时类型:

Genson genson = new GensonBuilder().useRuntimeType(true).create();
在这里你可以找到一些关于如何使用的例子

请注意,如果您曾经想要反序列化到ResponseObject,那么您可能会遇到问题,因为在json中没有关于基对象的具体类型的信息。但是,如果使用的json也是由Genson生成的,则可以通过启用类元数据序列化
builder.useClassMetadata(true)
轻松解决此问题


更多关于Genson中类型的文档。

感谢您的回复,它是从代码开始工作的。我如何在rest服务中配置.useRuntimeType(true),因为我只使用Genson 1.4 jar。,序列化和反序列化由javax.ws.rs使用genson Library处理。要为您的服务配置genson实例,请看这里的文档,这里还有一些关于stackoverflow的问题,您可以看到有关如何执行的代码片段。像这个一样,感谢您的响应,它是从代码开始工作的。我如何在我的rest服务中配置.useRuntimeType(true),因为我只使用Genson 1.4 jar。序列化和反序列化由javax.ws.rs使用Genson Library处理。要为您的服务配置Genson实例,请参阅此处的文档,还有一些关于stackoverflow的问题,您可以在其中看到有关如何执行的代码片段。像这个