需要为我的XStream反序列化提供适当的对象声明

时间:2012-10-13 23:24:35

标签: java xml object xstream

我的XML:

<autocomplete>
  <url_template>http://api-public.netflix.com/catalog/titles/autocomplete?{-join|&amp;|term}</url_template>
  <autocomplete_item>
    <title short="Star Wars: Episode V: The Empire Strikes Back: Original Theatrical Version"></title>
  </autocomplete_item>
</autocomplete>

我的对象:

public class AutoCompleteList
{
public String url_template;
public List<AutocompleteItem> autocomplete_item;
}

public class AutocompleteItem
{
public Title title;
}

public class Title
{
@XStreamAlias("short")
public String Short;
}

我的代码:

XStream xstream = new XStream();
xstream.alias("autocomplete", AutoCompleteList.class);
xstream.alias("title", Title.class);
AutoCompleteList myObj = (AutoCompleteList)xstream.fromXML(stringFromStream);

我无法从XML中检索“标题短”值。

另外,如果我的XML有多个autocomplete_item标记,xstream错误就会抱怨有一个重复的autocomplete_item实例。

有什么建议吗?

我在这里搜索了很多问题,但似乎没有什么对我有用。

1 个答案:

答案 0 :(得分:0)

对于short属性,请尝试添加@XStreamAsAttribute注释:

public class Title
{
  @XStreamAlias("short")
  @XStreamAsAttribute
  public String Short;
}

并在致电xstream.processAnnotations(Title.class)之前致电fromXML

对于多个autocomplete_item问题,您应该使用@XStreamImplicit

public class AutoCompleteList
{
  public String url_template;

  @XStreamImplicit(itemFieldName="autocomplete_item")
  public List<AutocompleteItem> autocomplete_item;
}

再次,您需要致电xstream.processAnnotations(AutoCompleteList.class)告诉XStream阅读注释,然后才能调用fromXML