将子XML元素反序列化为XML字符串

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将子XML元素反序列化为XML字符串相关的知识,希望对你有一定的参考价值。

使用Jackson或JAXB,有没有办法将整个子XML元素的子树反序列化/编组成String?

例如,给定以下XML:

<root>
  <foo>
    <bar>
      <baz/>
    </bar>
  </foo>
</root>

有没有办法反序列化/编组到下面的类

@XmlRootElement
public class Root {
    private String foo;

    // constructors, getters, setters, etc.
}

结果看起来像Root(foo="<bar><baz/></bar>")

答案

您可以为此编写自己的jackson反序列化器:

public class Test {
  public static void main(String[] args) throws Exception {
    ObjectMapper mapper = new XmlMapper();
    final SimpleModule module = new SimpleModule("configModule",   Version.unknownVersion());
    module.addDeserializer(Root.class, new DeSerializer());
    mapper.registerModule(module);
    // Root readValue = mapper.readValue(<xml source>);
  }
}

class DeSerializer extends StdDeserializer<Root> {

  protected DeSerializer() {
    super(Root.class);
  }

  @Override
  public Root deserialize(JsonParser p, DeserializationContext ctxt) throws Exception {
    // use p.getText() and p.nextToken to navigate through the xml and construct Root object
    return new Root();

  }
}

以上是关于将子XML元素反序列化为XML字符串的主要内容,如果未能解决你的问题,请参考以下文章

将空 XML 元素反序列化为 Guid.Empty

当元素可能是许多可能元素之一时,将 XML 元素反序列化为对象

需要帮助将 XML 文件反序列化为对象 C#

如何在将 xml 反序列化为 c# 对象时获取单个 xml 元素的多个值?

Jackson xml反序列化 - 序列化为一个列表,其中包含任意元素

如何将 xml 元素值反序列化为 C# 类属性