Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Jackson jr自定义反序列化程序_Android_Jackson_Json Deserialization - Fatal编程技术网

Android Jackson jr自定义反序列化程序

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解析为Java对象。如中所述,我需要将默认JSONReader替换为我的自定义:

JSON j = JSON.std.with(new MyJSONReader());
但有两个问题:

  • JSONReader没有默认构造函数

  • 没有关于如何使用JSONReader的文档

如何在Jackson jr中创建自定义反序列化程序?

我使用以下方法:

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
)的支持,如下所示: