我的应用程序有2个部分,一个Android客户端和一个用c#编码的Windows打印服务器。
我在java中使用Xstream将我的对象转换为XML(在android中)。这是其中的一部分:
<ROOT>
<id>1</id>
<serial>92000</serial>
<date>2013/2/15</date>
<ITEMS>
<ITEM>
<name>/**SOMETHING**/</name>
<idd>/**SOMETHING**/</idd>
<pd>/**SOMETHING**/</pd>
<ed>/**SOMETHING**/</ed>
</ITEM>
<ITEM>
<name>/**SOMETHING**/</name>
<idd>/**SOMETHING**/</idd>
<pd>/**SOMETHING**/</pd>
<ed>/**SOMETHING**/</ed>
</ITEM>
<ITEM>
<name>/**SOMETHING**/</name>
<idd>/**SOMETHING**/</idd>
<pd>/**SOMETHING**/</pd>
<ed>/**SOMETHING**/</ed>
</ITEM>
</ITEMS>
</ROOT>
如您所见,我有2个对象类型,一个ROOT对象类型和一个名为ITEMS的第二个对象类型的嵌套列表。 我可以读取ROOT对象的名称,序列和日期,但是对于ITEMS对象的嵌套列表,它总是返回null。
c#中的Root类的类是:
[XmlRoot("ROOT")]
public class ROOT_CLASS
{
[XmlElement("id")]
public string idVar{ get; set; }
[XmlElement("serial")]
public string serialVar{ get; set; }
[XmlElement("date")]
public string dateVar{ get; set; }
[XmlArray("ITEMS")]
[XmlArrayItem("ITEM")]
public List<NESTED_CLASS> oi { get; set; }
}
这里是嵌套的对象类:
[XmlRoot("ITEM")]
public class NESTED_CLASS
{
[XmlElement("name")]
public string nameVV; { get; set; }
[XmlElement("idd")]
public string iddVV; { get; set; }
[XmlElement("pd")]
public string pdVV; { get; set; }
[XmlElement("ed")]
public string edVV; { get; set; }
}
好的,如何从这个xml中反序列化NESTED_CLASS列表?就像我说的那样,我总是得到它。请帮我。 感谢...
答案 0 :(得分:0)
使用XmlArray属性
[XmlRoot(ElementName = "ROOT")]
public class Root
{
public int id { get; set; }
public int serial { get; set; }
public string date { get; set; }
[XmlArray(ElementName = "ITEMS")]
[XmlArrayItem("ITEM")]
public List<RootItem> Items { get; set; }
}
public class RootItem
{
public string name { get; set; }
public string idd { get; set; }
public string pd { get; set; }
public string ed { get; set; }
}
答案 1 :(得分:0)
您也可以使用xsd.exe生成C#类,而不是手动执行此操作。这可能更容易,并且在xml随时间变化的情况下更快;而且你不必担心你现在遇到的问题。
有关如何执行此操作的示例,请参阅Generate C# class from XML。
请注意,如果您正在使用非常大的xml文件,这种方法可能不是最好的方法,因为它将整个xml加载到内存中。如果是这种情况,您可能需要使用this方法。