首页 > 解决方案 > 面临将 XML 转换为 Object 的问题

问题描述

我正在尝试将以下 XML 转换为对象,

<Addresses><Address><AddressLine1>61A PEEL ST</AddressLine1><AddressLine2></AddressLine2><Suburb>WEST MELBOURNE</Suburb><State>VIC</State><PostCode>3003</PostCode></Address><Address><AddressLine1>U 101/61 PEEL ST</AddressLine1><AddressLine2></AddressLine2><Suburb>WEST MELBOURNE</Suburb><State>VIC</State><PostCode>3003</PostCode></Address><Address><AddressLine1>U 102/61 PEEL ST</AddressLine1><AddressLine2></AddressLine2><Suburb>WEST MELBOURNE</Suburb><State>VIC</State><PostCode>3003</PostCode></Address><Address><AddressLine1>59 PEEL ST</AddressLine1><AddressLine2></AddressLine2><Suburb>WEST MELBOURNE</Suburb><State>VIC</State><PostCode>3003</PostCode></Address><Address><AddressLine1>63 PEEL ST</AddressLine1><AddressLine2></AddressLine2><Suburb>WEST MELBOURNE</Suburb><State>VIC</State><PostCode>3003</PostCode></Address><Address><AddressLine1>63A PEEL ST</AddressLine1><AddressLine2></AddressLine2><Suburb>WEST MELBOURNE</Suburb><State>VIC</State><PostCode>3003</PostCode></Address><Address><AddressLine1>57 PEEL ST</AddressLine1><AddressLine2></AddressLine2><Suburb>WEST MELBOURNE</Suburb><State>VIC</State><PostCode>3003</PostCode></Address><Address><AddressLine1>57A PEEL ST</AddressLine1><AddressLine2></AddressLine2><Suburb>WEST MELBOURNE</Suburb><State>VIC</State><PostCode>3003</PostCode></Address></Addresses>

使用以下代码反序列化 XML,

XmlSerializer serializer = new XmlSerializer(typeof(Addresses));
            using (TextReader reader = new StringReader(addressValidationResult.Alternates))
            {
                Addresses result = (Addresses)serializer.Deserialize(reader);
            }

使用“addressValidationResult.Alternates”作为结果提供上述 XML 字符串。

PFB我的模型,

namespace Models
{
    public class Addresses
    {
         public List<Address> AddressesList { get; set; }
    }

    public class Address{
        public string AddressLine1 { get; set; }
        public string AddressLine2 { get; set; }
        public string Suburb { get; set; }
        public string State { get; set; }
        public string PostCode { get; set; }
    }
}

结果是一个没有任何数据的空列表。代码没有抛出异常,但数据也没有得到转换。

有人可以让我知道我在这里缺少什么吗

标签: c#xml-serialization

解决方案


您的反序列化模型和代码看起来是正确的,唯一缺少的是一些 XmlElement 属性。添加[XmlElement("Address")]AddressesList属性是这里的关键解决方案。

    [XmlRoot("Addresses")]
    public class Addresses
    {
        [XmlElement("Address")]
        public List<Address> AddressesList { get; set; }
    }

    public class Address
    {
        [XmlElement("AddressLine1")]
        public string AddressLine1 { get; set; }
        [XmlElement("AddressLine2")]
        public string AddressLine2 { get; set; }
        [XmlElement("Suburb")]
        public string Suburb { get; set; }
        [XmlElement("State")]
        public string State { get; set; }
        [XmlElement("PostCode")]
        public string PostCode { get; set; }
    }

推荐阅读