我正在尝试将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保持为空(即使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
的类,为什么不直接将字符串放入父类呢?或者使用enum
,其中包含MedienArt
的不同值。public enum DeMedienArtXmlDto
{
[XmlEnum("md_mart_bez")]
public Art1
}
关于c# - 将XML文件反序列化为DTO,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48341385/