.net core反序列化xml响应

问题描述 投票:0回答:2

我将此 xml 响应作为来自 USPS 3.0 邮政编码查找 api 的流

<ZipCodeLookupResponse>
 <Address ID="1">
 <Address1>Unit 2</Address1>
 <Address2>8 WILDWOOD DR</Address2>
 <City>OLD LYME</City>
 <State>CT</State>
 <Zip5>06371</Zip5>
 </Address>

 <Address ID="2">
 <Address1>Unit 2</Address1>
 <Address2>8 WILDWOOD DR</Address2>
 <City>OLD LYME</City>
 <State>CT</State>
 <Zip5>06371</Zip5>
 </Address>
</ZipCodeLookupResponse>

我正在尝试反序列化地址数组中的响应。

[XmlRoot(ElementName = "ZipCodeLookupResponse")]
public class UspsAddress
{
    [XmlArray("Address")]
    public UspsAddressResult[] Addresses {get;set;}
}

[XmlRoot(ElementName = "Address")]
public class UspsAddressResult
{
    [XmlElement(ElementName = "Address2")]
    public string Adress1 { get; set; }
    [XmlElement(ElementName = "Address1")]
    public string Adress2 { get; set; }
    [XmlElement(ElementName = "City")]
    public string City { get; set; }
    [XmlElement(ElementName = "State")]
    public string State { get; set; }
    [XmlElement(ElementName = "Zip5")]
    public string Zip { get; set; }
}

此代码始终返回一个空数组。如何修复此代码以从响应中获取两个地址?

...

    var content = await res.Content.ReadAsStreamAsync();

    var serializer = new XmlSerializer(typeof(UspsAddress));

    var results = (UspsAddress)serializer.Deserialize(content);
c# xml serialization
2个回答
4
投票

您可以使用 `XmlElement` 来代替使用

XmlArray
XmlArrayItem
属性来设置子元素的名称。反序列化器将识别出有多个元素应该被反序列化为对象列表。

你的班级看起来像这样:

[XmlRoot(ElementName = "ZipCodeLookupResponse")]
public class UspsAddress
{
    [XmlElement("Address")]
    public UspsAddressResult[] Addresses {get;set;}
}

0
投票

警告解决方案:CA5369:

var results = serializer.Deserialize(XmlReader.Create(content)) as UspsAddress;

© www.soinside.com 2019 - 2024. All rights reserved.