C# 使用服务引用将CDATA节作为字符串

C# 使用服务引用将CDATA节作为字符串,c#,xml,web-services,wsdl,C#,Xml,Web Services,Wsdl,使用c#和visual studio 2015 我正在使用一个外部Web服务,并且我已经使用交付的WSDL构建了一个服务引用。这一切都正常,我可以调用服务,但我得到一个错误,因为请求的格式不正确 服务定义的一部分是: <xsd:complexType name="GCTPLookupRequestType"> <xsd:sequence> <xsd:element name="gctpMessage" type="xsd:string" mi

使用c#和visual studio 2015

我正在使用一个外部Web服务,并且我已经使用交付的WSDL构建了一个服务引用。这一切都正常,我可以调用服务,但我得到一个错误,因为请求的格式不正确

服务定义的一部分是:

<xsd:complexType name="GCTPLookupRequestType">
    <xsd:sequence>    
    <xsd:element name="gctpMessage" type="xsd:string" minOccurs="1" maxOccurs="1" />
    </xsd:sequence>  
  </xsd:complexType>

gctpMessage是一个字符串元素,但应包含如下CDATA部分:

<![CDATA[
<Gctp v="1.0">
<System r="CprSoeg">
<Service r="STAM+">
<CprServiceHeader r="STAM+">
<Key>
<Field r="PNR" v="0000000000"/>
</Key>
</CprServiceHeader>
</Service>
</System>
</Gctp>
]]>

]]>
如果我像预期的那样将其作为字符串附加到gctpMessage属性中,似乎一切都正常,但当我使用Fiddler检查请求时,我发现这一切都是错误的:

<gctpMessage>
&lt;![CDATA[&lt;Gctp v="1.0"&gt;&lt;System r="CprSoeg"&gt;&lt;
Service r="STAM+"&gt;&lt;CprServiceHeader r="STAM+"&gt;&lt;Key&gt;&lt;
Field r="PNR" v="0000000000"/&gt;&lt;/Key&gt;&lt;/CprServiceHeader&gt;&lt;/
Service&gt;&lt;/System&gt;&lt;/Gctp&gt;]]&gt;
</gctpMessage>

![CDATA[Gctp v=“1.0”System r=“CprSoeg”
Service r=“STAM+”CprServiceHeader r=“STAM+”键
字段r=“PNR”v=“0000000000”//Key/CprServiceHeader/
服务/系统/Gctp]]
我知道这是由XML序列化程序将其输入为字符串导致的,因此会转义标记

但是我该怎么解决这个问题呢?WSDL已将其定义为字符串,我确实希望使用服务引用,但我不知道如何处理此。。。 更改服务不是一个选项


任何建议都会被采纳:)

只是完美的dbc,它成功了:)

谢谢你

  [System.Xml.Serialization.XmlIgnore]
        public string gctpMessage {
            get {
                return this.gctpMessageField;
            }
            set {
                this.gctpMessageField = value;
                this.RaisePropertyChanged("gctpMessage");
            }
        }

        [System.Xml.Serialization.XmlElementAttribute(Order = 1, ElementName = "gctpMessage")]
        public XmlNode[] CDataContent
        {
            get
            {
                var dummy = new XmlDocument();
                return new XmlNode[] { dummy.CreateCDataSection(gctpMessage) };
            }
            set
            {
                if (value == null)
                {
                    gctpMessage = null;
                    return;
                }

                if (value.Length != 1)
                {
                    throw new InvalidOperationException(
                        String.Format(
                            "Invalid array length {0}", value.Length));
                }

                gctpMessage = value[0].Value;
            }
        }

这有用吗。如果没有,您能否共享您的代码以及如何初始化
gctpMessage
属性?这似乎是一种解决方法。