使用soap消息样式将数据与字符串序列化

时间:2011-05-10 19:47:25

标签: .net web-services serialization soap xml-serialization

我有一个Web服务代理。在该代理上有一个方法,它采用两种自定义类型。当我调用Web服务时,会生成一条soap消息。

在我的场景中,我手动捕获该肥皂消息(使用fiddler)。我希望能够将包含此soap消息的字符串(我从手动创建的文件中读取)反序列化为我的两种原始类型的实例。

我知道这对于这两种类型的Xml DOM,XPath和Xml序列化很容易。我已经这样做了,虽然目前有两个单独的文件。我想将它们组合起来,并且希望避免手动格式化捕获的Soap消息。

是否有更自动的方式利用现有的Soap基础设施来进行反序列化?我想编写一次序列化代码,并希望它能够正常工作。

1 个答案:

答案 0 :(得分:1)

似乎.Net框架不会以易于使用的方式公开它。写入/读取数据的自定义代码(在SoapHttpClientProtocolSoapServerProtocol中)不会直接向用户公开。

您可以使用此代码至少使请求的内容正确映射:

XmlTypeMapping xmlTypeMapping = new SoapReflectionImporter()
    .ImportTypeMapping(typeof(T));
var xmlSerializer = new XmlSerializer(xmlTypeMapping);

您必须自己完成序列化/反序列化的其余部分(通过使用自定义代码编写SOAP标头和正文,并分别在您的内容前面跳过XML阅读器)。

您也可以尝试使用SoapFormatter,虽然它已被弃用,并且在很多场景(包括泛型)中都很糟糕: