FlexJSON在反序列化时排除属性

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

public class Foo { private String bar; private int baz; //getters & setters } 

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

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

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

是的,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() );