首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Genson 1.4 (JSON)不处理继承的Pojo

Genson 1.4 (JSON)不处理继承的Pojo
EN

Stack Overflow用户
提问于 2016-07-29 10:04:17
回答 1查看 244关注 0票数 1

在REST实现中,我使用Genson1.4进行JSON处理,在使用genson .please时,JSON继承无法工作,请参阅下面的示例代码结构。

这是我的BaseObject

代码语言:javascript
复制
This is my BaseObject

public class SynBaseObject implements Serializable
{
 private Long status;
//GettersAndSetters
}

这是我的孩子班

代码语言:javascript
复制
public class PhoneNumber extends SynBaseObject
{
private  String      countryCode;
private  String      areaCode;
private  String      localNumber;
//GettersAndSetters
}

这是我的响应对象

代码语言:javascript
复制
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中缺少CountryCodeareaCodelocalNumber,只有基类从如下代码中得到相同的处理.Tried

代码语言:javascript
复制
    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服务中的输出相同。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-29 16:50:47

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

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

代码语言:javascript
复制
Genson genson = new GensonBuilder().useRuntimeType(true).create();

在这里,您可以找到一些关于如何使用用Jaxrs自定义Genson的示例。

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38656021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档