【问题标题】:FlexJSON Exclude Properties Upon DeserializationFlexJSON 在反序列化时排除属性
【发布时间】:2012-03-06 18:25:13
【问题描述】:

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

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

    //getters & setters
}

我返回的 JSON 响应具有这两个属性,但在反序列化时,我不希望设置“bar”。原因是他们发送的属性是long,而我们的是String,所以反序列化会抛出IllegalArgumentException。

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

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

【问题讨论】:

    标签: java json deserialization flexjson


    【解决方案1】:

    是的,可以使用 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() );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-09
      • 2016-11-15
      • 2016-07-25
      • 2013-04-07
      • 1970-01-01
      • 2018-12-10
      相关资源
      最近更新 更多