我有来自第三方服务器的 wsdl。运行 svcutil 并最终获得了一组
XmlNode AMethod(object Request);
方法。有一个单独的 100 页 pdf 描述每种方法的响应/请求对象
我的想法是包装 web 方法并使用 XmlSerializer 返回强类型对象。返回的 xml 看起来像这样(我删除了肥皂标题):
<Response xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:type="ResponseExt"
xmlns="http://www.thirdparty.com/lr/">
<Code>0</Code>
<Message>SUCCESS</Message>
<SessionId>session_token</SessionId>
</Response>
看起来很简单。创建了一个类(来自文档/电线捕获):
[XmlRoot("Response")]
//EDIT added XmlType
[XmlType("ResponseExt", Namespace = "http://www.thirdparty.com/lr/")]
public class MyClass {
public string Code {get; set;}
public string Message {get; set;}
public string SessionId {get; set;}
}
处理时间:
//XmlNode node = xml from above
XmlSerializer serializer = new XmlSerializer(typeof(MyClass));
XmlNodeReader reader = new XmlNodeReader(node);
Myclass myclass = serializer.Deserialize(reader) as MyClass
最后一行是内部异常消息爆炸的地方:无法识别指定的类型:name='ResponseExt',namespace=' http ://www.thirdparty.com/lr/',at<Response xmlns=''
>。
我不知道如何让 Serializer 开心,这两个到底是什么意思
xsi:type="ResponseExt" xmlns="http://www.thirdparty.com/lr/
一如既往地感谢任何建议和指针
编辑:下面接受的答案。
我仍然遇到异常,直到我发现这个,希望它可以节省一些时间。我开始向后工作。在网络上捕获的 xml。反序列化为我创建的具有正确属性的类:像魅力一样工作。从 web 服务再次尝试 - 异常。由于某种原因,XmlSerializer 无法识别 ResponseExt。
XmlSerializer serializer = new XmlSerializer(typeof(Response));
XmlNode node = (XmlNode)results[0];
XmlDocument doc = new XmlDocument();
doc.LoadXml(node.OuterXml); //reload node
XmlNodeReader reader = new XmlNodeReader(doc.FirstChild); //there is only one node
Response rsp = serializer.Deserialize(reader) as Response; //works
编辑:基础问题 wsdl 文件不完整。在花了 2 天时间并找到了这个(丑陋的)解决方法之后,第三方供应商提供了完整的WSDL,其中包含所有类型的反序列化且没有错误。