【问题标题】:XML Serializer - Deserializing an XML arrayXML Serializer - 反序列化 XML 数组
【发布时间】:2015-03-20 13:55:58
【问题描述】:

我有以下示例 XML:

<PossibleAddresses>
    <Address tempid="12345">1 The Street England</Address>
    <Address tempid="6789">2 The Street England</Address>
    <Address tempid="4321">3 The Street England</Address>
    <Address tempid="1111">4 The Street England</Address>
</PossibleAddresses>

我正在尝试反序列化此 XML,以便从本质上获取包含两个属性的“地址”对象列表。一个是“tempid”,另一个是实际的地址字符串本身。

我的班级看起来像这样:

[XmlRoot("PossibleAddresses")]
    public class Addresses
    {
        [XmlArrayItem("Address", Type = typeof(Address))]
        public List<Address> PossibleAddresses { get; set; }
    }

    public class Address
    {
        [XmlAttribute(AttributeName = "tempid")]
        public string TempId { get; set; }

        [XmlElement(ElementName = "Address")]
        public string FullAddress { get; set; }
    }

然后我使用 XmlSerializer 反序列化 XML。 T 是“地址”类:

public static T DeserializeObject<T>(string data)
        {
            var ser = new XmlSerializer(typeof(T));
            return (T)ser.Deserialize(new StringReader(data));
        }

目前这将成功反序列化。我只是得到一个空的地址列表。

【问题讨论】:

  • 你还需要把PossibleAddresses 的装饰改成[XmlElement("Address", Type = typeof(Address))]public List&lt;Address&gt; PossibleAddresses { get; set; }

标签: c# xmlserializer


【解决方案1】:

FullAddress这里应该带有属性XmlText

[XmlText]
public string FullAddress { get; set; }

【讨论】:

    【解决方案2】:

    GoogleHireMe 是正确的,您需要 XmlText 属性。

    public class Address
    {
        [XmlAttribute(AttributeName = "tempid")]
        public string TempId { get; set; }
        [XmlText]
        public string FullAddress { get; set; }
    }
    

    但是,您可以将地址直接反序列化为数组:

    var serializer =
        new XmlSerializer(
            typeof(Address[]),
            new XmlRootAttribute("PossibleAddresses"));
    Address[] items;
    
    using(var stream = new StringReader(xml))
    using(var reader = XmlReader.Create(stream))
    {
        items = (Address[]) serializer.Deserialize(reader);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多