将XML文件反序列化为DTO

时间:2018-01-19 12:41:13

标签: c# .net xml

我正在尝试将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的属性也自行注释......)

我做错了什么,它没有填补这个属性?

提前致谢

1 个答案:

答案 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
}