调用USPS CityStateLookupResponse API反序列化XDocument到类返回null如何解决
问题根源
你的自定义类结构与USPS返回的XML结构不匹配。从响应示例可以看到,<City>、<State>、<Zip5>以及ID属性都被包裹在<ZipCode>子节点下,你将这些属性直接定义在根类CityStateLookUpResponse下,序列化器无法匹配到对应节点,因此反序列化结果为null。
修正方案
调整实体类结构,新增ZipCode子类承载子节点属性:
[Serializable()] [XmlRoot("CityStateLookupResponse", IsNullable = false)] public class CityStateLookUpResponse { [XmlElement("ZipCode")] public ZipCode ZipCode { get; set; } } public class ZipCode { [XmlAttribute("ID")] public string Id { get; set; } [XmlElement("City")] public string City { get; set; } [XmlElement("State")] public string State { get; set; } [XmlElement("Zip5")] public string Zip { get; set; } }
调整后无需修改原有反序列化逻辑,反序列化成功后可通过返回对象.ZipCode.City、返回对象.ZipCode.State的形式读取对应属性值。如果需要同时查询多个邮编,可将根类中的ZipCode属性改为List<ZipCode>类型即可适配多个ZipCode节点的返回结果。
内容的提问来源于stack exchange,提问作者user351479
相关产品推荐
相关产品推荐

