我正在尝试将 XML 文件导入 DTO。
示例 Xml
<?xml version="1.0" encoding="UTF-16"?>
<treffer>
<prod_internid>123456789</prod_internid>
<md_nr>56642</md_nr>
<md_mart_id>4</md_mart_id>
<md_mart_bez>Twitter</md_mart_bez>
</treffer>
Xml Dto
[XmlRoot("treffer")]
public class DeAnalyseArtikelXmlDto
{
[XmlElement("prod_internid")]
public long ArtikelId { get; set; }
[XmlElement("md_nr")]
public int MedienNr { get; set; }
public DeMedienArtXmlDto MedienArt { get; set; }
}
[XmlRoot("treffer")]
public class DeMedienArtXmlDto
{
[XmlElement("md_mart_bez")]
public string Bezeichnung { get; set; }
}
进口商:
public bool Import()
{
DeserializeXMLFileToObject<DeAnalyseArtikelXmlDto>("C:\\temp\\xml\\toImport.xml");
return true;
}
public static T DeserializeXMLFileToObject<T>(string XmlFilename)
{
T returnObject = default(T);
if (string.IsNullOrEmpty(XmlFilename)) return default(T);
try
{
StreamReader xmlStream = new StreamReader(XmlFilename);
XmlSerializer serializer = new XmlSerializer(typeof(T));
returnObject = (T)serializer.Deserialize(xmlStream);
}
catch (Exception ex)
{
// ExceptionLogger.WriteExceptionToConsole(ex, DateTime.Now);
}
return returnObject;
}
它适用于属性 ArtikelId 和 MedienNr,但属性 DeMedienArtXmlDto 保持为空(即使 DeMedienArtXmlDto 的属性被自己注释...)
我是不是做错了什么它没有填充这个属性?
提前致谢
您的程序应该如何知道 md_mart_bez
应该序列化为 MedienArt
?您必须通过添加适当的 XmlElement
来表明这一点:
[XmlRoot("treffer")]
public class DeAnalyseArtikelXmlDto
{
[XmlElement("prod_internid")]
public long ArtikelId { get; set; }
[XmlElement("md_nr")]
public int MedienNr { get; set; }
[XmlElement("md_mart_bez")]
public DeMedienArtXmlDto MedienArt { get; set; }
}
与其使用包装Bezeichnung
的类,不如直接将字符串放入您的父类中?或者使用包含 MedienArt
的不同值的 enum
。
public enum DeMedienArtXmlDto
{
[XmlEnum("md_mart_bez")]
public Art1
}
我是一名优秀的程序员,十分优秀!