C# 无法反序列化XML文件

C# 无法反序列化XML文件,c#,xml,serialization,C#,Xml,Serialization,我的程序在反序列化XML文件时遇到问题。 为此,我研究了几种解决方案,如。 但即使我尝试复制/粘贴该示例,它仍然不会给我任何信息。它没有抛出错误或任何东西,只是没有给我任何东西 我的XML看起来像 <PRODUCTS> <PRODUCT> <PRODUCT_ID>120129</PRODUCT_ID> <TITLE_DK><![CDATA[Udlejning - Pioneer CDJ-1000 MK3]]></TIT

我的程序在反序列化XML文件时遇到问题。 为此,我研究了几种解决方案,如。 但即使我尝试复制/粘贴该示例,它仍然不会给我任何信息。它没有抛出错误或任何东西,只是没有给我任何东西

我的XML看起来像

<PRODUCTS>
<PRODUCT>
<PRODUCT_ID>120129</PRODUCT_ID>
<TITLE_DK><![CDATA[Udlejning - Pioneer CDJ-1000 MK3]]></TITLE_DK>
<STATUS>1</STATUS>
<STOCK>99</STOCK>
<DISABLE_ON_EMPTY>1</DISABLE_ON_EMPTY>
<MANUFACTURER_ID>0</MANUFACTURER_ID>
<DELIVERY_ID>standard</DELIVERY_ID>
<FREIGHT_ID></FREIGHT_ID>
<UNIT_ID>1</UNIT_ID>
<NUMBER><![CDATA[0]]></NUMBER>
<EAN></EAN>
<PRODUCT_LINK><![CDATA[]]></PRODUCT_LINK>
<URL><![CDATA[/produkter/4977---aarhus--/120129-udlejning---pioneer-cdj-1000-mk3/]]></URL>
<WEIGHT>0,00</WEIGHT>
<FOCUS_FRONTPAGE>0</FOCUS_FRONTPAGE>
<FOCUS_CART>0</FOCUS_CART>
<SORTING>0</SORTING>
<LANGUAGE_LAYERS></LANGUAGE_LAYERS>
<USER_ACCESS></USER_ACCESS>
<USERGROUP_ACCESS></USERGROUP_ACCESS>
<RELATED_PRODUCT_IDS></RELATED_PRODUCT_IDS>
<RELATED_PRODUCT_NUMBERS></RELATED_PRODUCT_NUMBERS>
<PDF_FILES></PDF_FILES>
<DATE_ADDED>0000-00-00 00:00:00</DATE_ADDED>
<DATE_UPDATED>2014-01-08 12:48:58</DATE_UPDATED>
<EDBPRISER_ID></EDBPRISER_ID>
<DELETE></DELETE>
<DESCRIPTION_LIST_DK><![CDATA[Pris pr døgn 400,-]]></DESCRIPTION_LIST_DK>
<DESCRIPTION_LONG_DK><></DESCRIPTION_LONG_DK>
<DESCRIPTION_SHORT_DK><></DESCRIPTION_SHORT_DK>
<CATEGORY_ID>4977</CATEGORY_ID>
<SUB_CATEGORY_ID>4967</SUB_CATEGORY_ID>
<LIST_PRICE>0,00</LIST_PRICE>
<BUY_PRICE>300,00</BUY_PRICE>
<MIN_AMOUNT>1</MIN_AMOUNT>
<PRICE>300,00</PRICE>
<DISCOUNT>0,00</DISCOUNT>
<DISCOUNT_TYPE>a</DISCOUNT_TYPE>
<DISCOUNT_GROUP>0</DISCOUNT_GROUP>
<PICTURE_FOLDER></PICTURE_FOLDER>
<VARIANT_ID></VARIANT_ID>
<VARIANT_TYPES></VARIANT_TYPES>
</PRODUCT>
.....
但这并没有给我什么——我甚至不认为它贯穿了整件事


同样的例子也来自。也没有给我任何信息

我不确定,但是内容生成了一个无效的xml文件。通常,xml和您的数据对象模型中存在轻微的不匹配。有时,最简单的方法是创建一个产品的示例/虚拟实例,其中填充了一些简单的测试数据,并将其序列化为XML文件。然后比较您的.NET对象期望读取的内容和您试图为其提供的内容。另外,我认为空CDATA字段在技术上是有效的,但这些条目:我几乎可以肯定是无效的。注意空标记,我不应该尝试反序列化空标记?删除所有这些标签需要很多时间。我从一个客户那里得到了这个.xml文件,在那里我必须反序列化。这个文件很大!在我的代码中,我还尝试使那些带有空标记的代码可以为null,看看这是否有帮助。但我还是一无所获。修改xml文件中的每个产品元素以使其看起来正确需要很长时间。@MothCreek:您可以通过删除空标记来预清理xml:首先将文件数据作为字符串读取,然后运行字符串。Replace,call删除这些空箭头的任何实例。我建议通知您的客户XML无效,并在他们这方面进行修复,但我知道这可能不会发生。希望这是除了小的格式问题之外您所需要的修复!
public class PRODUCTS
{
    private List<PRODUCT> _product;
    public PRODUCTS()
    {
        _product = new List<PRODUCT>();
    }

    public List<PRODUCT> AllProducts
    {
        get { return _product; }
        set { _product = value; }
    }

    [XmlRoot]
    public class PRODUCT
    {

        public PRODUCT()
        {

        }

        public uint PRODUCT_ID { get; set; }

        public string TITLE_DK { get; set; }

        public byte STATUS { get; set; }

        public ushort STOCK { get; set; }

        public byte DISABLE_ON_EMPTY { get; set; }

        public byte MANUFACTURER_ID { get; set; }

        public string DELIVERY_ID { get; set; }

        public object FREIGHT_ID { get; set; }

        public byte UNIT_ID { get; set; }

        public string NUMBER { get; set; }

        public object EAN { get; set; }

        public string PRODUCT_LINK { get; set; }

        public string URL { get; set; }

        public string WEIGHT { get; set; }

        public byte FOCUS_FRONTPAGE { get; set; }

        public byte FOCUS_CART { get; set; }

        public byte SORTING { get; set; }

        public object LANGUAGE_LAYERS { get; set; }

        public object USER_ACCESS { get; set; }

        public object USERGROUP_ACCESS { get; set; }

        public object RELATED_PRODUCT_IDS { get; set; }

        public object RELATED_PRODUCT_NUMBERS { get; set; }

        public object PDF_FILES { get; set; }

        public string DATE_ADDED { get; set; }

        public string DATE_UPDATED { get; set; }

        public object EDBPRISER_ID { get; set; }

        public object DELETE { get; set; }

        public string DESCRIPTION_LIST_DK { get; set; }

        public string DESCRIPTION_LONG_DK { get; set; }

        public string DESCRIPTION_SHORT_DK { get; set; }

        public ushort CATEGORY_ID { get; set; }

        public string SUB_CATEGORY_ID { get; set; }

        public string LIST_PRICE { get; set; }

        public string BUY_PRICE { get; set; }

        public byte MIN_AMOUNT { get; set; }

        public string PRICE { get; set; }

        public string DISCOUNT { get; set; }

        public string DISCOUNT_TYPE { get; set; }

        public byte DISCOUNT_GROUP { get; set; }

        public string PICTURES { get; set; }

        public string URL_PICTURE { get; set; }

        public object PICTURE_FOLDER { get; set; }

        public object VARIANT_ID { get; set; }

        public object VARIANT_TYPES { get; set; }

    }
        private PRODUCTS DeserializeObject(string filename)
    {
        Console.WriteLine("Reading with XmlReader");

        XmlSerializer serializer = new
            XmlSerializer(typeof(PRODUCTS));

        FileStream fs = new FileStream(filename, FileMode.Open);
        XmlReader reader = XmlReader.Create(fs);

        PRODUCTS products;

        products = (PRODUCTS)serializer.Deserialize(reader);
        fs.Close();
        return products;
    }