C# 反序列化元素和属性具有重复名称的XML

C# 反序列化元素和属性具有重复名称的XML,c#,xml,serialization,C#,Xml,Serialization,我想反序列化以下XML。问题是重复的元素名和属性名。我试过这种方法 但我一直得到::“帐户xmlns=”,这是不应该的 (为了可读性,我已经推荐了一些类) 最大的问题是,是否有不同的反序列化到C#obj的方法,或者正确的方法是手动进行映射 编辑 增加了一个修改后的班级结构,有人能帮助我如何组织班级吗?不确定如何处理帐户中的所有Field=APIName元素?您没有在XML文件中提供 默认值为:xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instanc

我想反序列化以下XML。问题是重复的元素名和属性名。我试过这种方法

但我一直得到::“帐户xmlns=”,这是不应该的

(为了可读性,我已经推荐了一些类) 最大的问题是,是否有不同的反序列化到C#obj的方法,或者正确的方法是手动进行映射

编辑 增加了一个修改后的班级结构,有人能帮助我如何组织班级吗?不确定如何处理帐户中的所有Field=APIName元素?

您没有在XML文件中提供

默认值为:
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance“xmlns:xsd=”http://www.w3.org/2001/XMLSchema“
如果未提供自定义命名空间

尝试告诉您的
XmlReader
不要使用名称空间

 XmlReader reader = new XmlReader() { Namespaces = false };

但是:我强烈建议为您的文件使用特定的名称空间

我建议在代码中创建一个类,用上面的XML表示。完成此操作后,请使用XML序列化程序并查看生成的XML。然后您将看到XML应该是什么样子?我怀疑它是否会像您提供的那样整洁。创建一个表示XML的类是问题的一部分。不完全确定如何处理字段元素。我建议创建一个名为Fields的集合/列表/数组。您需要在帐户内、代理内和目录内各设置一个。但是要从您提供的XML中序列化/反序列化,您需要自己定制序列化/反序列化。网上有很多这样的例子,我无法控制我必须读取的文件,我基本上只获取文件夹位置,然后必须读取其中的所有xml文件。它可以工作,除了这个帐户XML文件,因为我不能反序列化它,因为我不能正确构造我的C#类。
[XmlRoot]
    public class Account {        
        public Agents Agents { get; set; }
        public Catalogs Catalogs { get; set; }
        public Locations Locations { get; set; }
        public Contacts Contacts { get; set; }
    }
    public class Agents {
        [XmlArray("Agent")]
        [XmlArrayItem("Field", typeof(Values))]
        public Values[] Field { get; set; }
    }
    public class Catalogs {
        [XmlArray("Catalog")]
        [XmlArrayItem("Field", typeof(Values))]
        public Values[] Field { get; set; }
    }
    public class Contacts {
        [XmlArray("Contact")]
        [XmlArrayItem("Field", typeof(Values))]
        public Values[] Field { get; set; }
    }
    public class Locations {
        [XmlArray("Location")]
        [XmlArrayItem("Field", typeof(Values))]
        public Values[] Field { get; set; }
    }
    public class Values {
        [XmlAttribute("APIName")]
        public string APIName { get; set; }
        [XmlText]
        public string Value { get; set; }
    }  
 XmlReader reader = new XmlReader() { Namespaces = false };