加载xml导致反序列化失败

时间:2018-09-29 11:20:41

标签: c# xml

我有以下xml文件,我已尝试使用方法加载该文件,以将其转换为业务对象,但是它在第1行,40处表示期望>,但当我查看它时看起来不错。

XmlSerializer serializer = new XmlSerializer(typeof( SalesOrderXml));
using (TextReader reader = new StringReader(testData))
{
    SalesOrderXmlresult = (SalesOrderXml) serializer.Deserialize(reader);
}

这里的Xml会导​​致其长度超出文章。

https://pastebin.com/pepp1QDe

我也不是我做错了什么,因为我使用了在线xml到poco生成器来帮助我解决它的长文件。

关于我可能做错了什么的任何提示,我都检查了文件中的隐藏字符,但没有。

public  class SalesOrderXml
{

    [XmlRoot(ElementName = "ORDER_ITEM")]
    public class ORDER_ITEM
    {
        [XmlElement(ElementName = "PRODUCT_ID")]
        public string PRODUCT_ID { get; set; }
        [XmlElement(ElementName = "STOCK_CODE")]
        public string STOCK_CODE { get; set; }
        [XmlElement(ElementName = "ITEM_TYPE")]
        public string ITEM_TYPE { get; set; }
        [XmlElement(ElementName = "DESCRIPTION")]
        public string DESCRIPTION { get; set; }
        [XmlElement(ElementName = "QUANTITY")]
        public string QUANTITY { get; set; }
        [XmlElement(ElementName = "PRICE")]
        public string PRICE { get; set; }
        [XmlElement(ElementName = "HEIGHT")]
        public string HEIGHT { get; set; }
        [XmlElement(ElementName = "WIDTH")]
        public string WIDTH { get; set; }
        [XmlElement(ElementName = "HINGE_HOLES")]
        public string HINGE_HOLES { get; set; }
        [XmlElement(ElementName = "DRILL_TOP")]
        public string DRILL_TOP { get; set; }
        [XmlElement(ElementName = "DRILL_BOTTOM")]
        public string DRILL_BOTTOM { get; set; }
        [XmlElement(ElementName = "DRILL_TOP_1")]
        public string DRILL_TOP_1 { get; set; }
        [XmlElement(ElementName = "DRILL_TOP_2")]
        public string DRILL_TOP_2 { get; set; }
        [XmlElement(ElementName = "DRILL_TOP_3")]
        public string DRILL_TOP_3 { get; set; }
        [XmlElement(ElementName = "RAW")]
        public string RAW { get; set; }
        [XmlElement(ElementName = "RAH")]
        public string RAH { get; set; }
        [XmlElement(ElementName = "LAW")]
        public string LAW { get; set; }
        [XmlElement(ElementName = "LAH")]
        public string LAH { get; set; }
        [XmlElement(ElementName = "FRAME_TYPE")]
        public string FRAME_TYPE { get; set; }
        [XmlElement(ElementName = "GLAZING_TYPE")]
        public string GLAZING_TYPE { get; set; }
        [XmlElement(ElementName = "LENGTH")]
        public string LENGTH { get; set; }
        [XmlElement(ElementName = "DEPTH")]
        public string DEPTH { get; set; }
        [XmlElement(ElementName = "CORNER_POSITION")]
        public string CORNER_POSITION { get; set; }
        [XmlElement(ElementName = "HORIZONTAL_GRAIN")]
        public string HORIZONTAL_GRAIN { get; set; }
        [XmlElement(ElementName = "PANEL_TYPE")]
        public string PANEL_TYPE { get; set; }
        [XmlElement(ElementName = "PANEL_EDGE")]
        public string PANEL_EDGE { get; set; }
        [XmlElement(ElementName = "PROFILED_EDGE")]
        public string PROFILED_EDGE { get; set; }
        [XmlElement(ElementName = "PROFILED_EDGE_FRONT")]
        public string PROFILED_EDGE_FRONT { get; set; }
        [XmlElement(ElementName = "PROFILED_EDGE_BACK")]
        public string PROFILED_EDGE_BACK { get; set; }
        [XmlElement(ElementName = "PROFILED_EDGE_LEFT")]
        public string PROFILED_EDGE_LEFT { get; set; }
        [XmlElement(ElementName = "PROFILED_EDGE_RIGHT")]
        public string PROFILED_EDGE_RIGHT { get; set; }
        [XmlElement(ElementName = "EDGE_TYPE")]
        public string EDGE_TYPE { get; set; }
        [XmlElement(ElementName = "ANGLES_REQUIRED")]
        public string ANGLES_REQUIRED { get; set; }
        [XmlElement(ElementName = "ANGLE_LENGTH")]
        public string ANGLE_LENGTH { get; set; }
        [XmlElement(ElementName = "ANGLE_DEPTH")]
        public string ANGLE_DEPTH { get; set; }
        [XmlElement(ElementName = "THICKNESS")]
        public string THICKNESS { get; set; }
        [XmlElement(ElementName = "REVERSE_COLOUR")]
        public string REVERSE_COLOUR { get; set; }
    }

    [XmlRoot(ElementName = "DELIVERY_ADDRESS")]
    public class DELIVERY_ADDRESS
    {
        [XmlElement(ElementName = "ADDRESS1")]
        public string ADDRESS1 { get; set; }
        [XmlElement(ElementName = "ADDRESS2")]
        public string ADDRESS2 { get; set; }
        [XmlElement(ElementName = "TOWN")]
        public string TOWN { get; set; }
        [XmlElement(ElementName = "POSTCODE")]
        public string POSTCODE { get; set; }
        [XmlElement(ElementName = "COUNTY")]
        public string COUNTY { get; set; }
        [XmlElement(ElementName = "COUNTRY")]
        public string COUNTRY { get; set; }
    }

    [XmlRoot(ElementName = "ORDER")]
    public class ORDER
    {
        [XmlElement(ElementName = "ORDER_ID")]
        public string ORDER_ID { get; set; }
        [XmlElement(ElementName = "ORDERED_BY")]
        public string ORDERED_BY { get; set; }
        [XmlElement(ElementName = "ORDER_REFERENCE")]
        public string ORDER_REFERENCE { get; set; }
        [XmlElement(ElementName = "CUSTOMER_ID")]
        public string CUSTOMER_ID { get; set; }
        [XmlElement(ElementName = "ACCOUNT_REFERENCE")]
        public string ACCOUNT_REFERENCE { get; set; }
        [XmlElement(ElementName = "ORDER_TYPE")]
        public string ORDER_TYPE { get; set; }
        [XmlElement(ElementName = "ORDER_RANGE")]
        public string ORDER_RANGE { get; set; }
        [XmlElement(ElementName = "ORDER_COLOUR")]
        public string ORDER_COLOUR { get; set; }
        [XmlElement(ElementName = "EDGE_TYPE")]
        public string EDGE_TYPE { get; set; }
        [XmlElement(ElementName = "REVERSE_COLOUR")]
        public string REVERSE_COLOUR { get; set; }
        [XmlElement(ElementName = "HORIZONTAL_GRAIN")]
        public string HORIZONTAL_GRAIN { get; set; }
        [XmlElement(ElementName = "HANDLE_TYPE")]
        public string HANDLE_TYPE { get; set; }
        [XmlElement(ElementName = "NOTES")]
        public string NOTES { get; set; }
        [XmlElement(ElementName = "ORDER_DATE")]
        public string ORDER_DATE { get; set; }
        [XmlElement(ElementName = "DELIVERY_DATE")]
        public string DELIVERY_DATE { get; set; }
        [XmlElement(ElementName = "ADDITIONAL_DELIVERY_INFO")]
        public string ADDITIONAL_DELIVERY_INFO { get; set; }
        [XmlElement(ElementName = "ORDER_ITEM")]
        public List<ORDER_ITEM> ORDER_ITEM { get; set; }
        [XmlElement(ElementName = "DELIVERY_ADDRESS")]
        public DELIVERY_ADDRESS DELIVERY_ADDRESS { get; set; }
        [XmlElement(ElementName = "DELIVERY_TYPE")]
        public string DELIVERY_TYPE { get; set; }
        [XmlElement(ElementName = "DELIVERY_PRICE")]
        public string DELIVERY_PRICE { get; set; }
        [XmlElement(ElementName = "DELIVERY_CODE")]
        public string DELIVERY_CODE { get; set; }
        [XmlElement(ElementName = "TOTAL_EX_VAT")]
        public string TOTAL_EX_VAT { get; set; }
        [XmlElement(ElementName = "TOTAL_INC_VAT")]
        public string TOTAL_INC_VAT { get; set; }
        [XmlElement(ElementName = "TOTAL_INC_DELIVERY")]
        public string TOTAL_INC_DELIVERY { get; set; }
    }

}

1 个答案:

答案 0 :(得分:0)

虽然在使用您的代码设置测试用例时没有得到与您相同的错误,但我确实收到了有关“ ORDER”意外的错误。

然后我通过指定SalesOrderXml.ORDER作为根类而不是SalesOrderXml,成功地反序列化XML。

    XmlSerializer serializer = new XmlSerializer(typeof(SalesOrderXml.ORDER));
    using (TextReader reader = new StringReader(testData))
    {
        var ob = (SalesOrderXml.ORDER)serializer.Deserialize(reader);
    }

我将testData设置为与您的pastebin字符串完全相同(空格根据Renzo的注释进行了修剪),并且我的测试用例成功运行。