【问题标题】:Sending a Hashtable to a Webservice将哈希表发送到 Web 服务
【发布时间】:2009-10-12 12:09:52
【问题描述】:

我正在尝试将具有通用键和值类型的项目列表发送到 asp.net 网络服务。 我怎样才能做到这一点? 我用List<Dictionary<String, String>> 尝试过,但这不起作用。我没有遇到异常,但是当我中断网络服务时,我的收藏为空。 数据可能如下所示: {"Data":{"fieldtype":"integer","isrequired":true,"isrequirederror":"Invalid Data"}}. 但正如我所说,键是通用的,有时有更多属性,有时没有。

非常感谢

这篇文章不能帮助我顺便说一句: How to send a hashtable to an asmx webservice?

【问题讨论】:

    标签: c# asp.net json dictionary web-services


    【解决方案1】:

    如果您想在服务中引入任何类型的泛型(从序列化/反序列化问题开始,到完成互操作性问题),您将很难使用 SOA 和 WCF。

    不要使用泛型参数。由于读/写操作性能,哈希表(或字典)仅在进程内使用中才有意义。如果您想通过网络传输这种格式的内容,请使用类似于以下结构的内容: 对列表(字符串、字符串)。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • IXmlSerializable 的解决方案对我不起作用,您能解释一下其他解决方案吗?
      • “不起作用”是什么意思?你到底做了什么?
      • 我该怎么做?我添加了课程并更新了我的 Wevservice 方法。无论如何...我想我必须将所有值转换为字符串
      • 将您的对象声明为SerializableDictionary<string, SerializableDictionary> 而不是Dictionary<string, Dictionary>
      • 我得到这个异常:无法将类型为 \u0027System.String\u0027 的对象转换为类型 \u0027SerializableDictionary`2[System.String,System.Object]\u0027","StackTrace":"跨度>
      【解决方案3】:
      {"Data":
       {"fieldtype":"integer",
        "isrequired":true,
        "isrequirederror":"Invalid Data"
       }
      }
      

      :这不是List<Dictionary<String, String>>
      这是Dictionary<string, Dictionary<String, String>>
      这有帮助吗?

      【讨论】:

      • 现在我得到了这个异常:{"Message":"Cannot convert of type of \u0027System.String\u0027 到 type \u0027System.Collections.Generic.Dictionary`2[System.String,System. String]\u0027","StackTrace":" 在 System.Web.Script.Serialization
      猜你喜欢
      • 1970-01-01
      • 2021-06-22
      • 1970-01-01
      • 2011-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多