Android Jackson jr自定义反序列化程序
我需要实现自定义反序列化程序,以便正确地将JSON解析为Java对象。如中所述,我需要将默认JSONReader替换为我的自定义:Android Jackson jr自定义反序列化程序,android,jackson,json-deserialization,Android,Jackson,Json Deserialization,我需要实现自定义反序列化程序,以便正确地将JSON解析为Java对象。如中所述,我需要将默认JSONReader替换为我的自定义: JSON j = JSON.std.with(new MyJSONReader()); 但有两个问题: JSONReader没有默认构造函数 没有关于如何使用JSONReader的文档 如何在Jackson jr中创建自定义反序列化程序?我使用以下方法: public class IntegerBooleanDeserializer extends JsonD
JSON j = JSON.std.with(new MyJSONReader());
但有两个问题:
- JSONReader没有默认构造函数
- 没有关于如何使用JSONReader的文档
public class IntegerBooleanDeserializer extends JsonDeserializer<Boolean> {
@Override
public Boolean deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException
{
Integer data = Integer.parseInt(jsonParser.readValueAs(String.class));
return data == 1 ? true : false;
}
}
@JsonDeserialize(using = IntegerBooleanDeserializer.class)
boolean force;
公共类IntegerBooleanDeserializer扩展JsonDeserializer{
@凌驾
公共布尔反序列化(JsonParser、JsonParser、DeserializationContext、DeserializationContext)抛出IOException、JsonProcessingException
{
整数数据=Integer.parseInt(jsonParser.readValueAs(String.class));
返回数据==1?真:假;
}
}
@JsonDeserialize(使用=IntegerBooleanDeserializer.class)
布尔力;
对于布尔自定义序列化程序,您可以对每个对象使用它。感谢Rahim Dastar的回答,但Jackson jr没有JsonDeserializer类。因为小杰克逊是杰克逊的简化版 看完这篇文章后,我开了个玩笑 我使用Map代替我的自定义Java类。然后我使用显式强制转换自定义setter方法:
//private Data data; - this is desired
private Map<String, Object> data;
public void setData(Object Data) {
if(data instanceof Map){
this.data = (Map<String, Object>) data;
} else {
this.data = null;
}
}
//私有数据;-这是需要的
私有地图数据;
公共void setData(对象数据){
if(映射的数据实例){
this.data=(Map)数据;
}否则{
this.data=null;
}
}
这是可行的,但不是一个解决方案,因为我有许多类和许多字段。Jackson jr 2.10添加了对注册自定义读卡器(
ValueReader
)和写入器(ValueWriter
)的支持,如下所示: