对元素和属性具有重复名称的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文件中提供名称空间。
如果没有提供自定义命名空间,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:我强烈建议为您的文件使用特定的命名空间!