将 XML 反序列化为对象 C#

本文关键字:对象 反序列化 XML | 更新日期: 2023-09-27 17:56:22

我正在尝试将xml序列化为对象,但是在序列化我的传输协议列表后是空的。我很确定这很容易,但我找不到我的错误。

我有以下 xml

<transport-agreements type="array">
   <transport-agreement>
     <id type="integer">1047</id>
     <description>Standard</description>
     <products type="array">
       <product>not important</product>
     </products>
   </transport-agreement>
   <transport-agreement>
     <id type="integer">1048</id>
     <description>Standard</description>
     <products type="array">
       <product>not important</product>
    </products>
   </transport-agreement>
</transport-agreements>

我有以下代码:

var resultContent = await response.Content.ReadAsStreamAsync();
var serializer = new XmlSerializer(typeof(TransportAgreementRoot));
var transportAgreements = (TransportAgreementRoot)serializer.Deserialize(resultContent);

还有我的课程:

[Serializable, XmlRoot("transport-agreements")]
    public class TransportAgreementRoot
    {
        [XmlArrayItem("transport-agreement")]
        TransportAgreement[] TransportAgreements { get; set; }         
     }
    public class TransportAgreement
    {
        [XmlElement("description")]
        public string Description { get; set; }
        [XmlElement("id")]
        public int Id { get; set; }
        [XmlElement("number")]
        public string Number { get; set; }
        [XmlElement("carrier")]
        public Carrier Carrier { get; set; }
        [XmlArray("products")]
        [XmlArrayItem("product")]
        public Product[] Products { get; set; }
    }

将 XML 反序列化为对象 C#

您可以使用一些在线转换器,它们将为您提供完整的类图。我的最爱是:这个

[XmlRoot("transport-agreements")]
public class TransportAgreementRoot
{
    [XmlElement("transport-agreement")]
    public TransportAgreement[] TransportAgreements { get; set; }
}
[XmlRoot("transport-agreement")]
public class TransportAgreement
{
    [XmlElement("description")]
    public string Description { get; set; }
    [XmlElement("id")]
    public int Id { get; set; }
    // other properties
}

我将 XmlArray 更改为 XmlElement。 数组将添加一个额外的标签,而 xml 文件中没有该标签。

   [Serializable, XmlRoot("transport-agreements")]
    public class TransportAgreementRoot
    {
        [XmlElement("transport-agreement")]
        TransportAgreement[] TransportAgreements { get; set; }
    }