XML在C#中反序列化数组

时间:2012-10-08 16:31:56

标签: c# xml serialization

我已经尝试过所有无法反序列化此XML文档的内容。

<items>
    <item>
        <id>00175565</id>
        <descr>KJAAM-EMC 16x(2+1)x0,5 T500</descr>
        <unit>st</unit>
        <vat>25</vat>
        <inprice>374</inprice>
        <isstock>0</isstock>
        <stock>0</stock>
        <paccount/>
        <ean>00175565</ean>
        <type>1</type>
        <producer/>
        <producer_itemno>00175565</producer_itemno>
        <package_height/>
        <package_depth/>
        <package_width/>
        <package_weight/>
        <stock_place/>
        <stock_warning/>
        <note/>
        <bulky>0</bulky>
        <omit>0</omit>
        <available>0</available>
        <account>3041</account>
        <constracct>3231</constracct>
        <exportacct>3315</exportacct>
        <eurevacct>3318</eurevacct>
        <euvatacct>3316</euvatacct>
        <supplierno/>
        <show_in_webshop>0</show_in_webshop>
        <price>
              <list-a>
                    <from-0>486.2</from-0>
              </list-a>
        </price>
    </item>
</items>

这是我反序列化的方式

[Serializable()]
public class item
{
    [System.Xml.Serialization.XmlElement("id")]
    public string ID { get; set; }

    [System.Xml.Serialization.XmlElement("descr")]
    public string Descr { get; set; }

    [System.Xml.Serialization.XmlElement("unit")]
    public string Unit { get; set; }

    [System.Xml.Serialization.XmlElement("vat")]
    public string Vat { get; set; }

    [System.Xml.Serialization.XmlElement("inprice")]
    public string Inprice { get; set; }

    [System.Xml.Serialization.XmlElement("isstock")]
    public string Isstock { get; set; }

    [System.Xml.Serialization.XmlElement("stock")]
    public string Stock { get; set; }

    [System.Xml.Serialization.XmlElement("paccount")]
    public string Paccount { get; set; }

    [System.Xml.Serialization.XmlElement("ean")]
    public string Ean { get; set; }

    [System.Xml.Serialization.XmlElement("type")]
    public string Type { get; set; }

    [System.Xml.Serialization.XmlElement("producer")]
    public string Producer { get; set; }

    [System.Xml.Serialization.XmlElement("producer_itemno")]
    public string Producer_itemno { get; set; }

    [System.Xml.Serialization.XmlElement("package_height")]
    public string Package_height { get; set; }

    [System.Xml.Serialization.XmlElement("package_depth")]
    public string Package_depth { get; set; }

    [System.Xml.Serialization.XmlElement("package_width")]
    public string Package_width { get; set; }

    [System.Xml.Serialization.XmlElement("package_weight")]
    public string Package_weight { get; set; }

    [System.Xml.Serialization.XmlElement("stock_place")]
    public string Stock_place { get; set; }

    [System.Xml.Serialization.XmlElement("stock_warning")]
    public string Stock_warning { get; set; }

    [System.Xml.Serialization.XmlElement("note")]
    public string Note { get; set; }

    [System.Xml.Serialization.XmlElement("bulky")]
    public string Bulky { get; set; }

    [System.Xml.Serialization.XmlElement("omit")]
    public string Omit { get; set; }

    [System.Xml.Serialization.XmlElement("available")]
    public string Available { get; set; }

    [System.Xml.Serialization.XmlElement("account")]
    public string Account { get; set; }

    [System.Xml.Serialization.XmlElement("constracct")]
    public string Constracct { get; set; }

    [System.Xml.Serialization.XmlElement("exportacct")]
    public string Exportacct { get; set; }

    [System.Xml.Serialization.XmlElement("eurevacct")]
    public string Eurevacct { get; set; }

    [System.Xml.Serialization.XmlElement("euvatacct")]
    public string Euvatacct { get; set; }

    [System.Xml.Serialization.XmlElement("supplierno")]
    public string Supplierno { get; set; }

    [System.Xml.Serialization.XmlElement("show_in_webshop")]
    public string Show_in_webshop { get; set; }

    [XmlArray("price")]
    [XmlArrayItem("list-a")]
    public List<string> price { get; set; }
}


[XmlRoot("items")]
public class items
{
    [XmlElement("item")]
    public item[] item { get; set; }
}

问题是我得到第一组项目的一行。但是当我删除

    [XmlArray("price")]
    [XmlArrayItem("list-a")]
    public List<string> price { get; set; }

它给了我所有的行。我已经尝试了很多东西,看看其他一些与此相关的问题,但是我无法让它发挥作用。

我能从中得到一些东西的唯一方法就是使用上面的代码。

我非常感谢能得到的所有帮助!

1 个答案:

答案 0 :(得分:6)

试试这个。这是工作。我测试了它:

[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
public partial class items
{
    public itemsItem item { get; set; }
}

[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class itemsItem
{
    public uint id { get; set; }
    public string descr { get; set; }

    public string unit { get; set; }

    public byte vat { get; set; }

    public ushort inprice { get; set; }

    public byte isstock { get; set; }

    public byte stock { get; set; }

    public object paccount { get; set; }

    public uint ean { get; set; }

    public byte type { get; set; }

    public object producer { get; set; }

    public uint producer_itemno { get; set; }

    public object package_height { get; set; }

    public object package_depth { get; set; }

    public object package_width { get; set; }

    public object package_weight { get; set; }

    public object stock_place { get; set; }

    public object stock_warning { get; set; }

    public object note { get; set; }

    public byte bulky { get; set; }

    public byte omit { get; set; }

    public byte available { get; set; }

    public ushort account { get; set; }

    public ushort constracct { get; set; }

    public ushort exportacct { get; set; }

    public ushort eurevacct { get; set; }

    public ushort euvatacct { get; set; }

    public object supplierno { get; set; }

    public byte show_in_webshop { get; set; }

    public itemsItemPrice price { get; set; }

}


[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class itemsItemPrice
{
    [System.Xml.Serialization.XmlElementAttribute("list-a")]
    public itemsItemPriceLista lista { get; set; }
}

[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class itemsItemPriceLista
{

    private decimal from0Field;

    [System.Xml.Serialization.XmlElementAttribute("from-0")]
    public decimal from0 { get; set; }

}

和反序列化代码:

string xml = @"<items>
            <item>
                <id>00175565</id>
                <descr>KJAAM-EMC 16x(2+1)x0,5 T500</descr>
                <unit>st</unit>
                <vat>25</vat>
                <inprice>374</inprice>
                <isstock>0</isstock>
                <stock>0</stock>
                <paccount/>
                <ean>00175565</ean>
                <type>1</type>
                <producer/>
                <producer_itemno>00175565</producer_itemno>
                <package_height/>
                <package_depth/>
                <package_width/>
                <package_weight/>
                <stock_place/>
                <stock_warning/>
                <note/>
                <bulky>0</bulky>
                <omit>0</omit>
                <available>0</available>
                <account>3041</account>
                <constracct>3231</constracct>
                <exportacct>3315</exportacct>
                <eurevacct>3318</eurevacct>
                <euvatacct>3316</euvatacct>
                <supplierno/>
                <show_in_webshop>0</show_in_webshop>
                <price>
                      <list-a>
                            <from-0>486.2</from-0>
                      </list-a>
                </price>
            </item>
        </items>
";

            XmlSerializer serializer = new XmlSerializer(typeof(items));
            using (StringReader stringReader = new StringReader(xml))
            {
                using (XmlTextReader textReader = new XmlTextReader(stringReader))
                {
                   items items =  (items)serializer.Deserialize(textReader);
                }
            }

修改

[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
public partial class items
{
    [XmlElementAttribute("item")]
    public itemsItem[] item { get; set; }
}

希望最终修改:)

根据您的.xml,试试这个。它适用于:http://www.kbbs.se/get_item.xml我已经测试过了。

[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
public partial class items
{

    [System.Xml.Serialization.XmlElementAttribute("item")]
    public itemsItem[] item {get; set;}    
}

[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class itemsItem
{

    public string id{get; set;} 

    public string descr{get; set;} 

    public string unit{get; set;} 

    public string vat{get; set;} 

    public decimal inprice{get; set;} 

    public byte isstock{get; set;} 

    public sbyte stock{get; set;} 

    public object paccount{get; set;} 

    public string ean{get; set;} 

    public byte type{get; set;} 

    public string producer{get; set;} 

    public string producer_itemno{get; set;} 

    public object package_height{get; set;} 

    public object package_depth{get; set;} 

    public object package_width{get; set;} 

    public object package_weight{get; set;} 

    public object stock_place{get; set;} 

    public string stock_warning{get; set;} 

    public object note{get; set;} 

    public byte bulky{get; set;} 

    public byte omit{get; set;} 

    public sbyte available{get; set;} 

    public ushort account{get; set;} 

    public ushort constracct{get; set;} 

    public ushort exportacct{get; set;} 

    public ushort eurevacct{get; set;} 

    public ushort euvatacct{get; set;} 

    public object supplierno{get; set;} 

    public byte show_in_webshop{get; set;} 

    public itemsItemPrice price{get; set;} 

}


[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class itemsItemPrice
{   
    [System.Xml.Serialization.XmlElementAttribute("list-")]
    public itemsItemPriceList list{get; set;} 

    [System.Xml.Serialization.XmlElementAttribute("list-a")]
    public itemsItemPriceLista lista{get; set;} 

    [System.Xml.Serialization.XmlElementAttribute("list-w")]
    public itemsItemPriceListw listw { get; set; } 

}


[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class itemsItemPriceList
{   
    [System.Xml.Serialization.XmlElementAttribute("from-")]
    public object from{get; set;} 

}


[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class itemsItemPriceLista
{
    [System.Xml.Serialization.XmlElementAttribute("from-0")]
    public decimal from0{get; set;} 

}

[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class itemsItemPriceListw
{
    [System.Xml.Serialization.XmlElementAttribute("from-0")]
    public byte from0{get; set;} 

}
祝你好运:)