我正在尝试将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/

10-16 04:19