You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

API返回XML反序列化失败求助:OTA_AirDetailsRS元素不符合预期

解决XML反序列化命名空间不匹配问题

你遇到的报错核心是XML根元素的命名空间未在C#类中正确声明——XML里的OTA_AirDetailsRS带有xmlns='http://www.opentravel.org/OTA/2003/05'属性,而你的类结构没有匹配这个命名空间,导致序列化器无法识别元素。

正确解决步骤:

  1. 给根类指定匹配的命名空间
    在根类的XmlRoot特性中同时声明元素名和命名空间,所有子元素如果继承根命名空间,也需要在XmlElement特性中指定相同的命名空间,示例代码:

    [XmlRoot("OTA_AirDetailsRS", Namespace = "http://www.opentravel.org/OTA/2003/05")]
    public class OtaAirDetailsRs
    {
        [XmlElement("Success", Namespace = "http://www.opentravel.org/OTA/2003/05")]
        public Success Success { get; set; }
    
        [XmlElement("FLSResponseFields", Namespace = "http://www.opentravel.org/OTA/2003/05")]
        public FlsResponseFields FlsResponseFields { get; set; }
    
        [XmlElement("FlightDetails", Namespace = "http://www.opentravel.org/OTA/2003/05")]
        public List<FlightDetails> FlightDetailsList { get; set; }
    }
    
    // 嵌套类示例,根据实际XML结构补充特性
    public class Success { /* 对应XML节点的属性/字段 */ }
    public class FlsResponseFields { /* 对应XML节点的属性/字段 */ }
    public class FlightDetails { /* 对应XML节点的属性/字段 */ }
    
  2. 验证反序列化方法
    确保你的反序列化方法没有干扰命名空间匹配,标准实现如下:

    public static T XmlDeserializeFromString<T>(this string xmlString)
    {
        var serializer = new XmlSerializer(typeof(T));
        using (var reader = new StringReader(xmlString))
        {
            return (T)serializer.Deserialize(reader);
        }
    }
    
  3. 排除其他干扰项

    • 确认XML字符串中根元素的命名空间拼写完全一致,无额外空格或格式错误
    • 不要用[XmlIgnore]忽略命名空间相关节点,这会直接导致匹配失败

内容的提问来源于stack exchange,提问作者Chris Chapman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 00:10:53