Java FlexJSON在反序列化时排除属性

Java FlexJSON在反序列化时排除属性,java,json,deserialization,flexjson,Java,Json,Deserialization,Flexjson,我正在从web服务接收JSON响应,但出于各种原因,我不希望在最终响应对象中反序列化某些属性。例如,我有: public class Foo { private String bar; private int baz; //getters & setters } 我返回的JSON响应具有这两个属性,但在反序列化时,我不希望设置“bar”。这是因为他们发送的属性是长的,而我们的属性是字符串,所以反序列化会引发IllegalArgumentException 另一

我正在从web服务接收JSON响应,但出于各种原因,我不希望在最终响应对象中反序列化某些属性。例如,我有:

public class Foo {
    private String bar;
    private int baz;

    //getters & setters
}
我返回的JSON响应具有这两个属性,但在反序列化时,我不希望设置“bar”。这是因为他们发送的属性是长的,而我们的属性是字符串,所以反序列化会引发IllegalArgumentException

另一种选择是使用类似JSON simple的东西解析JSON,删除我想要的属性,将其转换回JSON并将其传递到反序列化程序,但我希望尽可能避免这种情况,因为JSON非常大


有没有办法用ObjectFactory实现这一点?

是的,可以使用ObjectFactory来允许从长到字符串的转换。只需在路径上注册ObjectFactory,如下所示:

new JSONDeserializer().use("some.path.to.bar", new EnhancedStringObjectFactory() ).deserialize( json, new SomeObject() );



public class EnhancedStringObjectFactory implements ObjectFactory {
    public Object instantiate(ObjectBinder context, Object value, Type targetType, Class targetClass) {
        if( value instanceof String ) {
            return value;
        } else if( value instanceof Number ) {
            return ((Number)value).toString();
        } else {
           throw context.cannotConvertValueToTargetType(value, String.class);
        }
   }
}
您甚至可以将其注册为字符串的默认ObjectFactory,它将处理进入反序列化程序的任何字符串的情况:

new JSONDeserializer().use( String.class, new EnhancedStringObjectFactory() ).deserialize( json, new SomeObject() );