我想反序列化以下XML(缩短示例):
<annots>
<highlight subject="Highlight" page="0">
<contents>askdhaskjdhaskjhsakjhdakjshd</contents>
</highlight>
<text subject="Comment" page="0" title="Guest" color="#FFFF00">
<contents>Memo</contents>
</text>
</annots>
到目前为止,我想出的代码:
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "subject")
@JsonSubTypes({
@JsonSubTypes.Type(name = "Highlight", value = Highlight.class),
@JsonSubTypes.Type(name = "Comment", value = Text.class)
})
public abstract class Annotation {
@JacksonXmlProperty(localName = "subject")
public String subject;
@JacksonXmlProperty(isAttribute = true,localName = "page")
public String page;
@JacksonXmlProperty(isAttribute = true,localName = "rect")
public String rect;
@JacksonXmlProperty(isAttribute = true,localName = "flags")
public String flags;
@JacksonXmlProperty(isAttribute = true,localName = "name")
public String name;
@JacksonXmlProperty(isAttribute = true,localName = "title")
public String title;
@JacksonXmlProperty(isAttribute = true,localName = "color")
public String color;
@JacksonXmlProperty(isAttribute = true,localName = "opacity")
public String opacity;
@JacksonXmlProperty(localName = "contents")
public String contents;
}
但这种方法存在几个问题:
>
@JacksonXmlProperty t(localName="subject")始终为空,因为我将其用于类型信息。为什么?,或者如何绕过它?
还是这种方法已经错了?
最后是我使用的周围类:
@JacksonXmlElementWrapper(localName = "annots")
@JacksonXmlProperty(localName = "annots")
public List<Annotation> annots;
我能够使用正确的注释
子类型Highlight
和Text
以及可见的主题来解析此xml。我必须指定此属性应该是可见的:
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "subject",
visible = true)
此外,我正在使用jackson 2.8.8和woodstox 5.0.3进行xml解析。
上面提到了第2点。关于第1点,我认为这完全不能用@JsonTypeInfo
实现,因为它的整体思想是在生成的xml文档中显式地添加类型信息。你也许可以用JsonTypeResolver解决一些问题。
我对Jackson和类型层次结构有以下问题。我正在序列化一个类SubA,该类将扩展为一个字符串,然后尝试将其反序列化回来。当然,在编译时,系统不知道它是基还是SubA,因此我希望它是基,如果它是SubA,则会在编译后执行一些其他操作。 我的基本类看起来像: ...和一个派生自的类: ... 我试图执行以下代码: String是: 但我一次又一次地犯同样的错误。映射器现在知道如何处理另一个类参数-它
我想为我们的REST API实现一个自定义的反序列化器,它不仅被Java应用程序使用。因此,我不想让Jackson将类型信息放入序列化的JSON中。 我目前正在努力反序列化<code>CollectionExpand</code>,因为它包含特定<code>ResourceModel</code>的<code>数据</code>列表。 < code>ResourceModel是一个接口,每个< c
我有一个接口,其中和实现。服务器会返回这样的响应- 相应的类来建模它是 中的声明它是哪种车辆。我需要反序列化的成一个对象取决于。如果是,我需要在反序列化和期间使用反序列化。 如何使用gson实现这一点? 编辑-这篇文章的不同之处在于类类型()包含在需要反序列化的中。这里不是。如果在内,我可以为编写自定义反序列化程序,检查,并进行相应的反序列化。但是我想我需要为编写一个自定义反序列化程序,在这里我创
可以序列化/反序列化< code >映射吗 在这种特殊情况下,我知道总是,和 - 第三方类(我有序列化器和反序列化器),其他值是盒装原语。 有可能和杰克逊做这样的事吗?使用MapSerializer/MapDeserializer可以做到这一点吗?(我找不到任何例子)
我对Jackson有一个错误的理解,就是将json文件反序列化为poco。这是我的代码: 我的POCO命名为AnimalBean: }还有我的JSON文件: } 当我执行我的代码时,我有以下错误:未识别的字段“动物园”(类动画豆),未标记为可忽略的。我知道问题是我的json文件开始不直接由动物,但我不能改变它,因为它不是我的。我已经尝试把对象apper.configure(Deseriazatio
I'va是一个OID接口,可以由许多具体类型实现: 现在我有一个具有两个字段的对象,一个使用抽象接口类型(OID)定义,另一个使用具体类型(MyOID)定义 我想使用jackson以不同的方式序列化/反序列化字段,无论它们是使用抽象接口类型还是具体类型定义的: 注意,被序列化,包括类型信息(多态序列化),而被序列化为文本 为此,我将OID接口注释为: 并为每个具体类型分配了类型id: 最后,对容器