2012-03-06 48 views
1

我收到来自Web服务的JSON响应,但出于各种原因,我不想在最终响应对象中反序列化某些属性。例如,我有:FlexJSON在反序列化时排除属性

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

    //getters & setters 
} 

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

另一种选择是使用类似json-simple的方式解析JSON,删除我想要的属性,将其转换回JSON并传入解串器,但是我想避免这种情况,因为JSON非常大。

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

回答

2

是的,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()); 
相关问题