我需要将SOAP消息反序列化为C#类。这是SOAP响应结构的一个示例:
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns0="http://mynamespace.it">
<s:Header xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" />
<env:Body>
<ns0:objA env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<result href="#ID1" />
</ns0:objA>
<ns0:ArrayOfObjB id="ID1" env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ans1="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ans1:Array" ans1:arrayType="ns0:ObjB[3]">
<item href="#ID2" />
<item href="#ID3" />
<item href="#ID4" />
</ns0:ArrayOfObjB>
<ns0:ObjB id="ID2" env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns0:ObjB">
<ns0:field_1 xsi:type="xsd:string">1</ns0:field_1>
<ns0:field_2 xsi:type="xsd:string">2016</ns0:field_2>
<ns0:field_3 xsi:type="xsd:string">a</ns0:field_3>
</ns0:ObjB>
<ns0:ObjB id="ID3" env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns0:ObjB">
<ns0:field_1 xsi:type="xsd:string">1</ns0:field_1>
<ns0:field_2 xsi:type="xsd:string">2016</ns0:field_2>
<ns0:field_3 xsi:type="xsd:string">b</ns0:field_3>
</ns0:ObjB>
<ns0:ObjB id="ID4" env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns0:ObjB">
<ns0:field_1 xsi:type="xsd:string">1</ns0:field_1>
<ns0:field_2 xsi:type="xsd:string">2016</ns0:field_2>
<ns0:field_3 xsi:type="xsd:string">c</ns0:field_3>
</ns0:ObjB>
</env:Body>
</env:Envelope>
在Visual Studio 2015中,我通过粘贴此XML代码来创建类层次结构
类。我使用以下代码调用System.Runtime.Serialization.Formatters.Soap.SoapFormatter类提供的反序列化方法:
MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(responseMessageXML));
SoapFormatter sf = new SoapFormatter();
object o = sf.Deserialize(ms);
我发现以下例外:
Parse Error, no assembly associated with XML key ns0 objA
我该如何解决这个问题?
我尝试使用通过导入Web服务引用创建的自导入WSDL类,但我无法获得相关对象的价值。
似乎C#无法解决&#34; href&#34;属性引用。
非常感谢任何帮助:)