2009-02-12 41 views
1

使用ASP.NET WebServices时,默认情况下,您不能传递任何IDictionary对象,因为不支持用于IDictionaries的xml序列化。我已经找到了各种方法来序列化字典(http://weblogs.asp.net/pwelter34/archive/2006/05/03/444961.aspx,http://blogs.msdn.com/psheill/archive/2005/04/09/406823.aspx,http://www.mattberther.com/2004/06/14/serializing-an-idictionary-object/),但是,我找不到任何方法将此钩入到Asp.NET Web方法中。SOAP/asmx/WebMethods的自定义(IDictionary)XML序列化?

有没有办法把它挂,这样我可以使用IDictionaries与webMethods?

+0

不知道如果你问如何实现一个Web方法与此类型作为参数,或者如何来调用Web方法与此类型作为参数 – 2009-02-12 18:29:46

回答

0

取决于你如何使用这些方法,我们使用.NET 2.0方法与“Web引用”,你会发现,WSDL生成的类是局部的,我们创建一个(Web引用名)cs文件和碰到这样的:


public partial class WebReferenceName : System.Web.Services.Protocols.SoapHttpClientProtocol 
{ 
    // Overload the WSDL generated method that only takes a simple array 
    public ReturnType MethodName(List collection) 
    { 
     // redirect the call to the wsdl generated method with the appropriate parameters 
     return this.MethodName(collection.ToArray()); 
    } 
} 

重载将允许你用任何一种类型的集合

的在Web服务方面,你可以从一个简单的集合转换回一个更强大的收集调用该方法的名称,最有可能的与使用更强大的收藏ctor。其中一个ctors可能会消耗一个简单的集合。

0

问题是 - 你想在哪里通过字典?如果你只是想教你的服务如何序列化一个字典,那么在你的字典类中实现IXmlSerializable接口,然后序列化它,只要你喜欢。

问题将发生在客户端。 Java客户端应该如何反序列化您发送的内容?对于这个问题,.NET客户如何知道如何做到这一点?使用旧的ASMX Web服务让客户端做一些特殊的事情时没有什么好方法。这是WCF发明的众多原因之一。