【发布时间】:2015-09-24 18:53:24
【问题描述】:
我想反序列化以下 XML。问题是重复的元素名称和属性名称。我试过这个方法 Deserializing duplicate XML elements with unique attributes
但我不断收到:“Account 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# obj 的方法,或者正确的方法是手动进行映射?
编辑 添加了修改后的类结构,任何人都可以帮助我如何构建类吗?不确定如何处理 Account 中的所有 Field=APIName 元素?
【问题讨论】:
-
我建议在上面的 XML 中表示的代码中创建一个类。完成此操作后,请使用 XML 序列化程序并查看生成的 XML。然后您会知道 XML 应该 是什么样的?我怀疑它会不会像你提供的那样整洁。
-
创建一个表示 XML 的类是问题的一部分。不完全确定如何处理 Field 元素。
-
我建议创建一个名为 Fields 的集合/列表/数组。您需要在帐户中使用其中之一,在代理中需要一个,在目录中需要一个。但是要让它从您提供的 XML 序列化/反序列化,您需要自己自定义序列化/反序列化。网上有很多这样的例子。
标签: c# xml serialization