对元素和属性具有重复名称的XML进行反序列化

本文关键字:XML 反序列化 元素 属性 | 更新日期: 2023-09-27 18:01:18

我想对以下XML进行反序列化。问题是重复的元素名称和属性名称。我试过这种方法反序列化具有唯一属性的重复XML元素

但是我一直在。: "帐户xmlns= "不符合要求。"

<?xml version="1.0" encoding="utf-8"?>
<Account>
  <Field APIName="WrntyID">1234</Field>
  <Field APIName="ExternalID">4321</Field>
  <Field APIName="CreationDate">07/04/2015 18:28:45</Field>
  <Field APIName="Name"></Field>
  <Field APIName="Phone"></Field>
  <Field APIName="Mobile"></Field>
  <Field APIName="Fax"></Field>
  <Field APIName="Email"></Field>
  <Field APIName="GovID"></Field>
  <Field APIName="Note"></Field>
  <Field APIName="IsActive">True</Field>
  <Field APIName="ConnectedToSuperBiz">False</Field>
  <Field APIName="Street"></Field>
  <Field APIName="City"></Field>
  <Field APIName="State"></Field>
  <Field APIName="Country">USA</Field>
  <Field APIName="ZipCode">33172</Field>
  <Field APIName="Discount">0</Field>
  <Field APIName="PriceLevelName">USD</Field>
  <Field APIName="Prop1"></Field>
  <Field APIName="Prop2"></Field>
  <Field APIName="Prop3"></Field>
  <Field APIName="Prop4"></Field>
  <Field APIName="Prop5"></Field>
  <Agents>
    <Agent>
      <Field APIName="WrntyID">54321</Field>
      <Field APIName="ExternalID"></Field>
    </Agent>
  </Agents>
  <Catalogs>
    <Catalog>
      <Field APIName="WrntyID">12345</Field>
      <Field APIName="ExternalID"></Field>
    </Catalog>
  </Catalogs>
  <Locations>
    <Location>
      <Field APIName="WrntyID">123456</Field>
      <Field APIName="ExternalID">0002</Field>
    </Location>
  </Locations>
  <Contacts>
    <Contact>
      <Field APIName="WrntyID">1234</Field>
      <Field APIName="ExternalID"></Field>
    </Contact>
  </Contacts>
</Account>

我的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; }
    }  

(为了可读性起见,我已经提交了一些类)最大的问题是,是否有另一种反序列化到c#对象的方法,或者正确的方法是手动进行映射?

编辑添加了一个修订的类结构,谁能帮助我如何构建类?不确定如何处理帐户中的所有字段=APIName元素?

对元素和属性具有重复名称的XML进行反序列化

您没有在XML文件中提供名称空间。

如果没有提供自定义命名空间,XmlRootAttribute默认为:xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"

试着告诉你的XmlReader不要使用名称空间

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

BUT:我强烈建议为您的文件使用特定的命名空间!