我们遇到的问题是,如果响应是单个对象,WCF XML Serializer正在更改输出对象的标记,但如果它是对象的列表,那么它是正确的。
这是列表项的响应
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
...
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ListObjectsResponse xmlns="http://our.namespace/">
<ListObjectsResult>
<Object>
...
</Object>
<Object>
...
</Object>
...
</ListObjectsResult>
</ListObjectsResponse>
</s:Body>
</s:Envelope>
您可以看到我们在<Object>
结果下有一堆<ListObjects>
元素。
如果我们再调用另一个只返回一个<Object>
的方法,那就是结果:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
...
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<GetObjectResponse xmlns="http://our.namespace/">
<GetObjectResult>
...
</GetObjectResult>
</GetObjectResponse>
</s:Body>
</s:Envelope>
您可以看到<Object>
标记已不再存在且已更改为<GetObjectResult>
。
我们原本希望看到单个项目的xml响应,如:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
...
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<GetObjectResponse xmlns="http://our.namespace/">
<GetObjectResult>
<Object>
...
</Object>
</GetObjectResult>
</GetObjectResponse>
</s:Body>
</s:Envelope>
生成的XML响应是否不正确,或者我们是愚蠢的,我们不应该担心XML本身?