如何防止序列化程序将字符串用CDATA括起来

时间:2018-06-21 05:34:45

标签: xml vb.net soap

我正在寻找一种方法来停止我的Web API中的序列化器,以用CDATA标记将字符串括起来。我的肥皂服务使用主体中的转义字符串字段来保存xml文档。远程SoapService无法理解和处理CDATA括起来的String,因此我需要找到一种方法来告诉它不要将其封装起来,或者找到一种在发送之前将其删除的方法。

`<System.Web.Services.Protocols.SoapHeaderAttribute("AuthHeaderValue"), System.Web.Services.Protocols.SoapHeaderAttribute("tMLHeaderValue"),System.Web.Services.Protocols.SoapRpcMethodAttribute("", RequestNamespace:="java:lsr.webservice.wisor.com", ResponseNamespace:="java:lsr.webservice.wisor.com", Use:=System.Web.Services.Description.SoapBindingUse.Literal)>  _

Public Function processSyncRequest(ByVal [string] As String) As <System.Xml.Serialization.XmlElementAttribute("response")> String
Dim results() As Object = Me.Invoke("processSyncRequest", New Object() {[string]})
Return CType(results(0),String)
End Function`

使用CDATA创建此正文

<string xmlns=""><![CDATA[&lt;localserviceporequest xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xmlns:xsd=&quot;http://www.w3.org/2001/XMLSchema&quot; xmlns=&quot;http://www.synchronoss.com/lsr/FTR_PO&quot;&gt;
&lt;addressvalidation&gt;
&lt;ccna&gt;XD1&lt;/ccna&gt;
&lt;txnum /&gt;
&lt;dtsent /&gt;
&lt;tos /&gt;
&lt;ctval /&gt;
&lt;location&gt;
  &lt;route /&gt;
  &lt;aft&gt;N&lt;/aft&gt;
  &lt;sano&gt;1100&lt;/sano&gt;
  &lt;sasf /&gt;
  &lt;sasd&gt;S&lt;/sasd&gt;
  &lt;sasn&gt;Coast&lt;/sasn&gt;
  &lt;sath&gt;Hwy&lt;/sath&gt;
  &lt;sass /&gt;
  &lt;city&gt;Beach&lt;/city&gt;
  &lt;state&gt;CA&lt;/state&gt;
  &lt;zip&gt;90000&lt;/zip&gt;
&lt;/location&gt;
&lt;/addressvalidation&gt;
&lt;/localserviceporequest&gt;]]></string>

1 个答案:

答案 0 :(得分:0)

希望我的发现可以帮助其他人在这个问题上不浪费大量时间。我的问题是两个方面。我曾经在代码中使用 SecurityElement.Escape(myString)来确保保存了我的字符串。然后,当我将字符串传递给我的Soap调用时,系统尝试再次对其进行清理,这似乎是默认行为,这导致“ <”变为int且远端无法理解并出现错误。第二个问题是我的字符串中存在CDATA标记,我认为这是问题的根源,但事实证明,这确实不是问题的一部分,但ReadyAPI在XML视图中显示了它。我去吃生菜之后,我发现那里不存在。