【发布时间】:2018-01-23 12:49:39
【问题描述】:
像这样对 XML 文件进行映像:
<?xml version="1.0" encoding="UTF-16"?>
<treffer>
<prod_internid>123456789</prod_internid>
<md_nr>123123</md_nr>
<md_mart_id>4</md_mart_id>
<md_mtyp_nr>9876</md_mtyp_nr>
<mra_th>
<ie_th_pth>-1</ie_th_pth>
<ie_th_ea_bez>Fehler: Keine Angabe</ie_th_ea_bez>
</mra_th>
</treffer>
如您所见,<md_XY></md_XY> 有三个标签。
我想将它们反序列化为如下所示的对象:
public class DeMedienXmlDto
{
[XmlElement("md_nr")]
public int MedienNr { get; set; }
[XmlElement("md_mart_id")]
public int MedienArtId { get; set; }
[XmlElement("md_mtyp_nr")]
public string MedienTypId { get; set; }
}
但这应该是整个反序列化对象的属性:
[XmlRoot("treffer")]
public class DeAnalyseArtikelXmlDto
{
[XmlElement("prod_internid")]
public long ArtikelId { get; set; }
[XmlElement("treffer")]
public DeMedienXmlDto Medium { get; set; }
[XmlElement("mra_th")]
public List<DeThemenXmlDto> Themen { get; set; }
}
我尝试用 [XmlElement("treffer")] 注释 Medium 属性,因为标签是 <treffer> 的子标签,但这不起作用...
反序列化<mra_th>...</mra_th> 可以工作,因为我可以使用分组标记对列表进行注释,但我没有<md...> 的此类标记。
- 我怎样才能做到这一点?
我的 xml 反序列化器如下所示:
public class XmlDeserializer : IXmlDeserializer
{
public T Deserialize<T>(string xmlFilename)
{
var returnObject = default(T);
if (string.IsNullOrEmpty(xmlFilename)) return default(T);
try
{
var xmlStream = new StreamReader(xmlFilename);
var serializer = new XmlSerializer(typeof(T));
returnObject = (T)serializer.Deserialize(xmlStream);
}
catch (Exception exception) {
LogHelper.LogError($"Das XML-File {xmlFilename} konnte nicht deserialisiert werden: {exception.Message}");
throw;
}
return returnObject;
}
}
提前致谢
编辑(澄清):
我希望将以下标签反序列化为DeMedienXmlDto 类型的对象:
<md_nr><md_mart_id><md_mtyp_nr>
【问题讨论】:
-
正如@Ondrej Tucny 指出的那样,您不能直接反序列化为您描述的对象结构,并且需要序列化为与 xml 匹配的对象结构。然后,您可以以任何您喜欢的方式操作您的“treffer”对象。如果您选择将不同的元素放入不同的对象中使用,请记住您还需要反转该过程并将它们放回“treffer”中,然后再序列化 xml。
标签: c# .net xml xmlserializer