解決済み コンテンツの内容を次のように変更しました:
// Lists
@XStreamImplicit(itemFieldName = "Contents")
public List<Contents> Contents = new ArrayList<Contents>();
次の XML を逆シリアル化しようとしています。
<?xml version="1.0" encoding="UTF-8"?>
<Items>
<Item>
<type>Test</type>
<uid>1</uid>
<depends>1</depends>
<catid>1</catid>
<label>Test</label>
<defaultVal>default</defaultVal>
<answer>Test</answer>
<Contents>
<Content>
<uid>1</uid>
<label>Test</label>
</Content>
</Contents>
</Item>
</Items>
問題は、コンテンツに到達すると、別のレベルで深くなるためにクラッシュすることです。
これは、XMLをDeSerializeする方法です。コンテンツなしで機能します。
public static Object DeSerializeFromXML(String xml, Class items, Class item)
{
XStream xstream = new XStream();
xstream.processAnnotations(new Class[] { items, item });
return xstream.fromXML(xml);
}
DeSerialize メソッドを呼び出す方法は次のとおりです。
Items reader = (Items)Data.Serialization.Instance().DeSerializeFromXML(xml, Items.class, Item.class);
そして最後に私のオブジェクト:
Items.cs
@XStreamAlias("Items")
public class Items
{
public Items() { items = new ArrayList<Item>(); }
@XStreamImplicit(itemFieldName = "Item")
public List<Item> items = new ArrayList<Item>();
}
アイテム.cs
@XStreamAlias("Item")
public class Item
{
// Type
public String type = "";
// Ids
public int uid = 0;
public int catid = 0;
public int depends = 0;
// Values
public String label = "";
public String defaultVal = "";
public String answer = "";
// Lists
public Contents content;
public Item()
{
}
public Item(String type, int uid, int catid, int depends, String label,
String defaultval, String answer)
{
this.type = type;
this.uid = uid;
this.catid = catid;
this.depends = depends;
this.label = label;
this.defaultVal = defaultval;
this.answer = answer;
content = new Contents();
}
@XStreamAlias("Contents")
public static class Contents
{
public Contents()
{
contents = new ArrayList<Content>();
}
@XStreamImplicit(itemFieldName = "Content")
public List<Content> contents = new ArrayList<Content>();
}
Content.cs
@XStreamAlias("Content")
public class Content
{
public int uid = 0;
public String label = "";
public Content()
{
}
public Content(int uid, String label)
{
this.uid = uid;
this.label = label;
}
次のレベルの注釈が正しいかどうかはよくわかりません。どんな助けでも大歓迎です。