我正在使用Java WSDL。
填充请求对象并使用request方法后,Enum和Boolean属性未随请求一起发送

经过一些搜索后,我尝试添加[DataContract] / [EnumMember]属性,但结果仍然相同(未成功)

在服务reference.cs上,我执行了以下操作

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.7.3190.0")]
    [System.SerializableAttribute()]
    [System.Runtime.Serialization.DataContract]
    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "{some link}")]
    public enum clientSystemEnum
    {

        [System.Runtime.Serialization.EnumMember()]
        /// <remarks/>
        TOP_SERVER,

        [System.Runtime.Serialization.EnumMember()]
        /// <remarks/>
        TOP_WEBCLIENT,

        [System.Runtime.Serialization.EnumMember()]
        /// <remarks/>
        TOP_IBE,

        [System.Runtime.Serialization.EnumMember()]
        /// <remarks/>
        SAF,

        [System.Runtime.Serialization.EnumMember()]
        /// <remarks/>
        EXTERNAL_SYSTEM,

        [System.Runtime.Serialization.EnumMember()]
        /// <remarks/>
        CCC,

        [System.Runtime.Serialization.EnumMember()]
        /// <remarks/>
        UNKNOWN,
    }


我的请求对象

doVacancyRequest.doVacancy = new doVacancy()
                {
                    vacancyRequest = new vacancyRequest()
                    {
                        pos = new pointOfSale()
                        {
                            agencyKey = "20000000",
                            clientSystem = clientSystemEnum.TOP_IBE,
                            userNumber = {my user num}
                        },
                        echotoken = "package list aa606774-f460-4404-a172-3a5a36a94eae",
                        type = serviceType.PACKAGE,
                        traveler = new traveler[]
                        {
                            new traveler(){ type = travelerType.ADULT, uid = "T1", tourOperatorPosition = 0 },
                            new traveler(){ type = travelerType.CHILD, uid = "T2", tourOperatorPosition = 0, age=6 }
                        },
                        fromDate = new DateTime(2019, 12, 08),
                        endDate = new DateTime(2019, 12, 12),
                        searchOptions = new searchOptions()
                        {
                            availableOnly = true,
                            availabilityList = true,
                            useCache = true,
                            onlyCheapest = true
                        },
                        flightSearchCriteria = new flightSearchCriteria()
                        {
                            airportFrom = "TLV",
                            airportTo = "HER"
                        },
                        packageSearchCriteria = new packageSearchCriteria()
                        {
                            loadAdditionalGeographicUnits = true,
                            loadURLs = true
                        },
                        mainOccupancy = 2,
                        extType = "P"
                    }
                };


这是提琴手的xml

<vacancyRequest xmlns="">
                <pos>
                    <agencyKey>20000000</agencyKey>
                    <userNumber{my user num}</userNumber>
                </pos>
                <echotoken>package list aa606774-f460-4404-a172-3a5a36a94eae</echotoken>
                <traveler>
                    <uid>T1</uid>
                    <tourOperatorPosition>0</tourOperatorPosition>
                </traveler>
                <traveler>
                    <uid>T2</uid>
                    <tourOperatorPosition>0</tourOperatorPosition>
                </traveler>
                <flightSearchCriteria>
                    <airportFrom>TLV</airportFrom>
                    <airportTo>HER</airportTo>
                </flightSearchCriteria>
                <searchOptions />
                <extType>P</extType>
                <packageSearchCriteria />
            </vacancyRequest>


它可以看到enum和boolean属性没有随请求一起发送

缺少的属性:
枚举:

clientSystem = clientSystemEnum.TOP_IBE,
type = travelerType.ADULT,
type = serviceType.PACKAGE,


布尔值:

packageSearchCriteria = new packageSearchCriteria()
                        {
                            loadAdditionalGeographicUnits = true,
                            loadURLs = true
                        },
 searchOptions = new searchOptions()
                        {
                            availableOnly = true,
                            availabilityList = true,
                            useCache = true,
                            onlyCheapest = true
                        },


将不胜感激,
提前致谢

最佳答案

您是否使用客户端代理类来调用服务?通常,服务应自动添加这些序列化项。据我所知,只有当我们使用Channel Factory调用服务时,客户端才会错过一些序列化项。由于项目具有服务器名称空间,导致此问题,导致类型转换出错。我们应该明确指定序列化项的名称空间,如下所示。

//you should use your practical namespace to replace this value
  [DataContract(Namespace = "http://schemas.datacontract.org/2004/07/Server1")]
    public class Product
    {
        [DataMember]
        public int ID { get; set; }
        [DataMember]
        public string Name { get; set; }
        [DataMember]
        public Color Color { get; set; }
    }
    public enum Color
    {
        Red,
        Green,
        Blue
}


我们不需要将数据协定添加到Enum项目中,因为这是默认工具。
此外,建议您通过添加服务引用来调用该服务。它将自动生成名称空间。
随时让我知道问题是否仍然存在。

关于java - C#使用Java WSDL,Enum和Boolean属性不会在请求时发送,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57308748/

10-14 13:05
查看更多