杰克逊反序列化到子元素列表 [英] Jackson deserialize to list of child elements

查看:80
本文介绍了杰克逊反序列化到子元素列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个看起来像这样的xml

I have an xml that looks like this

<Trade>
  <row>
    <TradeID>1</TradeID>
  </row>
  <row>
    <TradeID>2</TradeID>
  </row>
</Trade>

我想将此反序列化为对象列表.现在我知道我可以做到

And I'd like to deserialize this into a list of objects. Now I know I could do

public class Trade{
  List<Row> rows;
  public class Row{
    int tradeID;
  }
}

但是理想情况下,我想避免完全基于outter标签创建一个类,因为它毫无价值.有什么办法可以将这个xml直接反序列化为List<Row>?

But ideally I'd like to avoid creating a class based on the outter tag entirely because it's worthless. Is there any way I could deserialize this xml directly to a List<Row>?

推荐答案

如果您想直接反序列化为List<Row>,只需在

If you'd like to deserialize into List<Row> directly , you can just specify the desired valueType in xmlMapper#readValue

 String xml =
        "<Trade>\r\n"
            + "  <row>\r\n"
            + "    <TradeID>1</TradeID>\r\n"
            + "  </row>\r\n"
            + "  <row>\r\n"
            + "    <TradeID>2</TradeID>\r\n"
            + "  </row>\r\n"
            + "</Trade>\r\n"
            + "";
    XmlMapper xmlMapper = new XmlMapper();
    List<Row> rows = Arrays.asList(xmlMapper.readValue(xml, Row[].class));

    System.out.println(rows);

打印:

[Row [tradeId=1], Row [tradeId=2]]

和Row类:

import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;

@JacksonXmlRootElement(localName = "row")
public class Row {
  @JacksonXmlProperty(localName = "TradeID")
  private int tradeId;

  public int getTradeId() {
    return tradeId;
  }

  public void setTradeId(int tradeId) {
    this.tradeId = tradeId;
  }

  @Override
  public String toString() {
    return "Row [tradeId=" + tradeId + "]";
  }
}

这篇关于杰克逊反序列化到子元素列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆