在REST实现中,我使用Genson1.4进行JSON处理,在使用genson .please时,JSON继承无法工作,请参阅下面的示例代码结构。
这是我的BaseObject
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输出:
{“baseObject”:{“状态”:空},“errorCode”:空,“errorMessage”:空,“primaryKey”:空}
在JSON中缺少CountryCode、areaCode和localNumber,只有基类从如下代码中得到相同的处理.Tried
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服务中的输出相同。
发布于 2016-07-29 16:50:47
默认情况下,Genson在ser/de期间使用静态类型。这意味着它将把对象看作是SynBaseObject的实例,而不是具体类型的PhoneNumber。
您可以通过配置告诉Genson使用运行时类型:
Genson genson = new GensonBuilder().useRuntimeType(true).create();在这里,您可以找到一些关于如何使用用Jaxrs自定义Genson的示例。
请注意,如果您想反序列化为ResponseObject,那么您可能会遇到麻烦,因为在json中没有关于基本对象的具体类型的信息。但是,如果使用的json也是由Genson生成的,那么您可以通过启用类元数据序列化builder.useClassMetadata(true)轻松地解决这个问题。
关于Genson中的多态处理类型的更多文档。
https://stackoverflow.com/questions/38656021
复制相似问题