2009-10-12 66 views
1

我试图发送一个具有通用键和值类型的项目列表到一个asp.net web服务。 我该怎么做? 我试过List<Dictionary<String, String>>,但这不起作用。我没有遇到异常,但当我在webserivice中断时,我的集合为空。 该数据可能看起来像这样: {"Data":{"fieldtype":"integer","isrequired":true,"isrequirederror":"Invalid Data"}}. 但正如我所说,键是通用的,有时有更多的属性,有时不是。发送一个哈希表到Webservice

THX很多

这篇文章不能帮助我的BTW: How to send a hashtable to an asmx webservice?

回答

1

如果您想要在服务中引入任何种类的泛型,那么您将会遇到困难,特别是SOA和WCF - 从序列化/反序列化开始问题和完成互操作性问题。

请勿使用通用参数。由于读/写操作性能,散列表(或字典)仅在进程内使用才有意义。如果您想通过电线以这种格式传输某些内容,请使用类似于以下结构的内容: 配对列表(字符串,字符串)。

0
{"Data": 
{"fieldtype":"integer", 
    "isrequired":true, 
    "isrequirederror":"Invalid Data" 
} 
} 

:这不是一个List<Dictionary<String, String>>
这是一个Dictionary<string, Dictionary<String, String>>
能帮助呢?

+0

现在我得到这个异常: { “消息”:“无法将类型\ u0027System.String \ u0027的对象输入\ u0027System.Collections.Generic.Dictionary'2 [System.String,System.String] \ u0027“,”StackTrace“:”at System.Web.Script.Serialization – k0ni 2009-10-12 12:27:36

1

实现IDictionary的类不能被序列化为XML,它是XmlSerializer类的限制。通常的解决方法是执行IXmlSerializable来提供自定义的序列化逻辑,如shown here。另一个选择是将字典转换为键/值对列表

+0

IXmlSerializable的解决方案对我来说不起作用,你能解释其他解决方案吗? – k0ni 2009-10-12 12:32:47

+0

你是什么意思“不起作用”?你想做什么? – 2009-10-12 12:37:47

+0

我该怎么做呢?我添加了类并更新了我的Wevservice方法。 无论如何...我想我必须将所有值转换为字符串 – k0ni 2009-10-12 12:39:55