EnhancedAirBook3.2.0未反序列化保留属性

时间:2015-08-17 14:13:16

标签: xml web-services serialization sabre

我们已将EnhancedAirBook升级到最新版本3.2.0 我们使用Visual Studio 2013(Update 5)将EnhancedAirBook作为Web引用使用 在代码中,我们设置了EnhancedAirBook Request对象 在添加OTA_AirPriceRQ请求时,我们设置PriceRequestInformation Retain属性=“true”。
但是当我们将请求对象淡化为字符串并查看XML时,PriceRequestInformation元素上不存在Retain属性(见下文)。

request.OTA_AirPriceRQ = new EnhancedAirBookRQOTA_AirPriceRQ
                {
                    PriceRequestInformation = new EnhancedAirBookRQOTA_AirPriceRQPriceRequestInformation
                    {
                        OptionalQualifiers =
                            new EnhancedAirBookRQOTA_AirPriceRQPriceRequestInformationOptionalQualifiers
                            {
                                PricingQualifiers =
                                    new EnhancedAirBookRQOTA_AirPriceRQPriceRequestInformationOptionalQualifiersPricingQualifiers
                                    {
                                        CurrencyCode = paramsService.Currency
                                    }
                            },
                        Retain = true
                    } 
                };

它的反序列化表示是:

<OTA_AirPriceRQ xmlns="http://services.sabre.com/sp/eab/v3_2">
 <PriceRequestInformation>
   <OptionalQualifiers>
      <PricingQualifiers CurrencyCode="USD">
       <PassengerType Code="ADT" Quantity="1" />
     </PricingQualifiers>
   </OptionalQualifiers>
 </PriceRequestInformation>

我们找到了解决方法。
备注/删除EnhancedAirBook的Reference.cs文件中的所有其他PriceRequestInformation属性,并仅保留Retain属性。 (见下文)
代码:

/// <remarks/>
    //[System.Xml.Serialization.XmlAttributeAttribute()]
    //public bool FutureTicket
    //{
    //    get
    //    {Re
    //        return this.futureTicketField;
    //    }
    //    set
    //    {
    //        this.futureTicketField = value;
    //    }
    //}

    /// <remarks/>
    //[System.Xml.Serialization.XmlIgnoreAttribute()]
    //public bool FutureTicketSpecified
    //{
    //    get
    //    {
    //        return this.futureTicketFieldSpecified;
    //    }
    //    set
    //    {
    //        this.futureTicketFieldSpecified = value;
    //    }
    //}

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public bool Retain {
        get {
            return this.retainField;
        }
        set {
            this.retainField = value;
        }
    }

    /// <remarks/>
    //[System.Xml.Serialization.XmlIgnoreAttribute()]
    //public bool RetainSpecified
    //{
    //    get
    //    {
    //        return this.retainFieldSpecified;
    //    }
    //    set
    //    {
    //        this.retainFieldSpecified = value;
    //    }
    //}

它的反序列化表示是:

 <OTA_AirPriceRQ xmlns="http://services.sabre.com/sp/eab/v3_2">
<PriceRequestInformation Retain="true">
  <OptionalQua lifiers>
    <PricingQualifiers CurrencyCode="USD">
      <PassengerType Code="ADT" Quantity="1" />
    </PricingQualifiers>
  </OptionalQualifiers>
</PriceRequestInformation>

有没有其他方法来设置属性而不修改Reference.cs文件?

1 个答案:

答案 0 :(得分:1)

设置RetainSpecified = true将解决问题 [AttributeName]指定的属性用于设置可选的xml属性。