gpt4 book ai didi

json - 如何在 Jackson 中编写自定义序列化器和反序列化器?

转载 作者:行者123 更新时间:2023-12-04 12:36:12 31 4
gpt4 key购买 nike

我有一个具有十多个属性的类。对于基本类型的大部分属性,我希望使用默认的 BeanSerializer 和 BeanDeserializer 或者其他什么来减少我需要编写的繁琐代码。对于自定义和数组类型的其他属性,我想做一些自定义序列化器/反序列化器。请注意,我无法更改底层 JSON 字符串。但我可以完全访问 android 代码。我正在使用 Jackson 1.7.9/Ektorp 1.1.1。

我应该继承 BeanDeserializer 吗?我遇到了麻烦。它需要一个没有参数的默认构造函数,但我不知道如何调用 super 构造函数。

class MyType{
// a dozen properties with primitive types String, Int, BigDecimal
public Stirng getName();
public void setName(String name);

// properties that require custom deserializer/serializer
public CustomType getCustom();
public void setCustom(CustomType ct);
}

class MyDeserializer extends BeanDeserialzer{
// an exception is throw if I don't have default constructor.
// But BeanDeserializer doesn't have a default constructor
// It has the below constructor that I don't know how to fill in the parameters
public MyDeserializer(AnnotatedClass forClass, JavaType type,
BeanProperty property, CreatorContainer creators,
BeanPropertyMap properties,
Map<String, SettableBeanProperty> backRefs,
HashSet<String> ignorableProps, boolean ignoreAllUnknown,
SettableAnyProperty anySetter) {
super(forClass, type, property, creators, properties, backRefs, ignorableProps,
ignoreAllUnknown, anySetter);
}
@Override
public Object deserialize(JsonParser jp, DeserializationContext dc, Object bean)
throws IOException, JsonProcessingException {
super.deserialize(jp, dc, bean);
MyType c = (MyType)bean;

ObjectMapper mapper = new ObjectMapper();

JsonNode rootNode = mapper.readValue(jp, JsonNode.class);
// Use tree model to construct custom
// Is it inefficient because it needs a second pass to the JSON string to construct the tree?
c.setCustom(custom);
return c;
}
}

我搜索了谷歌,但找不到任何有用的例子/教程。如果有人可以给我发送一些工作示例,那就太好了!谢谢!

最佳答案

要对 BeanSerializer/-Deserializer 进行子类化,最好使用更新版本的 Jackson,因为该区域已通过 BeanSerializerModifier 和 BeanDeserializerModifier 的显式支持得到改进,它们可以改变实例的配置。

但只是为了确保,您还可以指定自定义序列化器/反序列化器仅用于单个属性,如下所示:

class Foo {
@JsonSerialize(using=MySerializer.class)
public OddType getValue();
}

关于json - 如何在 Jackson 中编写自定义序列化器和反序列化器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7923326/

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