gpt4 book ai didi

c# - 将 XML 文件反序列化为 DTO

转载 作者:太空宇宙 更新时间:2023-11-03 22:49:10 26 4
gpt4 key购买 nike

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

关于c# - 将 XML 文件反序列化为 DTO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48341385/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com