我正在研究一名前雇员开发的项目。该项目有一个类,其中包含一个用于接受XML文档的函数,然后解析XML以查找与该类属性匹配的属性,然后返回使用属性值填充的类对象。
这是XSD文件,名为PTSPodResult.xsd
?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="PTSPodResult">
<xs:complexType>
<xs:sequence>
<xs:element name="ResultText" type="xs:string" />
<xs:element name="ReturnCode" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
这是类文件,名为PTSPodResultPartial.vb
Imports System.IO
Imports System.Xml.Serialization
Namespace TrackingObjects.V2.Rev1
Partial Public Class PTSPodResult
Shared Function Create(XmlString As String) As PTSPodResult
Dim sr As StringReader = New StringReader(XmlString.ToString())
Dim xsw As New XmlSerializer(GetType(PTSPodResult))
Dim returnResult As New PTSPodResult
Try
Dim PTSPodResultLoaded = xsw.Deserialize(sr)
returnResult = DirectCast(PTSPodResultLoaded, PTSPodResult)
Catch ex As Exception
Throw New Exception(XmlString)
End Try
Return returnResult
End Function
Friend Function ToXml() As String
Return XsdSerializer.ToXml(Me, Me.GetType, "PTSPodResult")
End Function
End Class
End Namespace
当我调用create方法时,从webresponse传递outerXML,一旦它到达Create函数的第一行,它就返回一个异常。异常的ex.message值与我传递给函数的outerXML字符串相同。
下面列出了来自调用类的代码片段;
Try
returnValue = TrackingObjects.V2.Rev1.PTSPodResult.Create(Response.OuterXml)
Catch ex As Exception
RaiseEvent ResponseError(ex.Message)
End Try
Return returnValue
下面列出了Response.OuterXml的值;
<?xml version="1.0" encoding="UTF-8"?><PTSRRERESULT><ResultText>Your Proof of Delivery record is complete and will be processed shortly.</ResultText><ReturnCode>0</ReturnCode></PTSRRERESULT>
执行Try部分后,它会立即进入Catch部分。 ex.Message值列在下面;
<?xml version="1.0" encoding="UTF-8"?><PTSRRERESULT><ResultText>Your Proof of Delivery record is complete and will be processed shortly.</ResultText><ReturnCode>0</ReturnCode></PTSRRERESULT>
如您所见,excpetion消息值是保存文本,作为我发送给TrackingObjects.V2.Rev1.PTSPodResult.Create()函数的response.outerXML。
我的问题是,为什么调用TrackingObjects.V2.Rev1.PTSPodResult.Create()函数会立即返回异常?在调试器中,当我按下F11时,它甚至没有进入该功能。它只是返回调用者,抛出异常。
有什么想法吗?
谢谢,
戴夫