我正在尝试将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 Dtos
[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保持为null(即使DeMedienArtXmlDto的属性也自行注释......)
我做错了什么,它没有填补这个属性?
提前致谢
答案 0 :(得分:3)
您的计划应该如何知道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
的类?另外,使用包含enum
的不同值的MedienArt
。
public enum DeMedienArtXmlDto
{
[XmlEnum("md_mart_bez")]
public Art1
}