gpt4 book ai didi

java - FlexJSON 反序列化时排除属性

转载 作者:行者123 更新时间:2023-11-30 04:52:16 26 4
gpt4 key购买 nike

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

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

//getters & setters
}

我返回的 JSON 响应具有这两个属性,但在反序列化时我不希望设置“bar”。原因是他们发送的属性是一个 long 属性,但我们的是一个 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() );

关于java - FlexJSON 反序列化时排除属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9589644/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com