FlexJSON在反序列化时排除属性

时间:2012-03-06 18:25:14

标签: java json deserialization flexjson

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

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

    //getters & setters
}

我回来的JSON响应有两个属性,但在反序列化时我不想设置“bar”。原因是他们发送的属性很长,但我们的是一个String,所以反序列化会抛出IllegalArgumentException。

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

有没有办法用ObjectFactory做到这一点?

1 个答案:

答案 0 :(得分:2)

是的,ObjectFactory可用于允许从Long转换为String。只需在您的路径上注册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);
        }
   }
}

您甚至可以将其注册为String的默认ObjectFactory,它将处理进入反序列化器的任何String的情况:

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