在xml中反序列化嵌套列表

时间:2014-05-05 08:50:17

标签: c# xml silverlight deserialization xml-deserialization

我是c#silverlight初学者我的情况是我有thios xml代码:

        string xmlstring = @"<?xml version='1.0' encoding='utf-8' ?> 
                           <par>  
                           <name>amount</name>
                           <label>Amount</label>
                           <unit>Hundred</unit >
                           <comp>
                           <type>Combo</type>
                           <attributes>
                           <type>Integer</type>
                           <displayed>4</displayed>
                           <selected>0</selected>
                           <item>5</item>       
                           </attributes>
                           </comp>
                           </par>";

**现在问题是什么?** 在最后一行,当我尝试调试&#34; item&#34;在Debug.WriteLine(attrib.item)行上分配了几个像5这样的值;我只看到"5"在调试时它没有显示其他值。我想我需要为它实现一个列表。但是如何在这里做我不知道的事情。有人可以帮助我,这样我就可以在这个c#代码中将所有指定的值都赋予item,因为在这一步之后我会创建一个GUI。 Woudl是一个很大的帮助。

注意:我不能使用ArrayList,因为silverligth不支持任何其他的lastertnative吗?

1 个答案:

答案 0 :(得分:2)

这就是你需要的:

[XmlRoot(ElementName = "parameter")]
public class Parameter
{
    [XmlElement("name")]
    public string Name { get; set; }
    [XmlElement("label")]
    public string Label { get; set; }
    [XmlElement("unit")]
    public string Unit { get; set; }
    [XmlElement("component")]
    public Component Component { get; set; }
}

[XmlRoot(ElementName = "component")]
public class Component {
    [XmlElement("type")]
    public string Type { get; set; }
    [XmlElement("attributes")]
    public Attributes Attributes { get; set; }
}

[XmlRoot(ElementName = "attributes")]
public class Attributes
{
    [XmlElement("type")]
    public string Type { get; set; }
    [XmlElement("displayed")]
    public string Displayed { get; set; }
    [XmlElement("selected")]
    public string Selected { get; set; }
    [XmlArray("items")]
    [XmlArrayItem("item", typeof(string))]
    public List<string> Items { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        string xmlstring = @"<?xml version='1.0' encoding='utf-8' ?> 
                       <parameter>  
                       <name>max_amount</name>
                       <label>Max Amount</label>
                       <unit>Millions</unit>
                       <component>
                       <type>Combo</type>
                       <attributes>
                       <type>Integer</type>
                       <displayed>4</displayed>
                       <selected>0</selected>
                       <items>
                       <item>5</item>
                       <item>10</item>
                       <item>20</item>
                       <item>50</item>
                       </items>
                       </attributes>
                       </component >
                       </parameter>";


        XmlSerializer deserializer = new XmlSerializer(typeof(Parameter));
        XmlReader reader = XmlReader.Create(new StringReader(xmlstring));

        Parameter parameter = (Parameter)deserializer.Deserialize(reader);

        Console.WriteLine("Type: {0}", parameter.Component.Attributes.Type);
        Console.WriteLine("Displayed: {0}", parameter.Component.Attributes.Displayed);
        Console.WriteLine("Selected: {0}", parameter.Component.Attributes.Selected);

        Console.WriteLine("Items: ");

        foreach (var item in parameter.Component.Attributes.Items)
        {
            Console.WriteLine("\t{0}", item);
        }

        Console.ReadLine();
    }
}

注意xmlstring中的小变化,现在每个<item></item>都在容器内:

<items>
    <item>5</item>
    <item>10</item>
    <item>20</item>
    <item>50</item>
</items>