【问题标题】:Dictionary in wcfwcf 中的字典
【发布时间】:2014-08-18 19:32:20
【问题描述】:

我有一个 WCF 服务,其中包含一个返回字典的方法。

代理类中生成的方法返回ArrayOfKeyValueOfstringStringKeyValueOfstringstring数组。 我该如何使用这种方法?

合约方式:

        [OperationContract]
        Dictionary<string, string> GetESGKeywordQuestion();

In the proxy class i have 

ArrayOfKeyValueOfstringstringKeyValueOfstringstring[] GetESGKeywordQuestion()
{
// code
}

【问题讨论】:

  • 你想在这个方法中传递字典并作为数组返回吗?
  • stackoverflow.com/questions/5953808/… 可能讨论了同样的问题。
  • 我不明白为什么代理类中生成的方法返回 ArrayOfKeyValueOfstringStringKeyValueOfstringstring 数组而不是 Dictionary
  • Dictionary&lt;string, string&gt; 特定于 c#。 WSDL 需要以其他语言(PHP、JAVA、VB.net 等)可以理解的方式描述返回类型。 Dictionary&lt;string,string&gt; 也可以描述为 KeyValuePair&lt;string,string&gt; 对象的数组。很可能这就是正在发生的事情。
  • 谢谢你的解释

标签: c# asp.net-mvc wcf


【解决方案1】:

accepted answer in another similar thread 对链接 telling you how to have Dictionary at the client side 的引用 在 .NET 到 .NET 通信中。换句话说,如果您希望您的服务被 PHP 或 Java 等非点网应用程序使用,那么互操作性就会很差。如果您已经学习/记住了 CS 中的数据结构,您就会知道字典是通过像 B 这样的非线性结构实现的-tree,因此字典不太可能包含在 WSDL 中,因为它的复杂性和变体。为客户端生成的 ArrayOfKeyValueOfstringStringKeyValueOfstringstring 结构经过精心设计和预期。如果您想看到双方的一致性并希望互操作性,那么不要使用 Dictionary,而是使用线性结构,例如 KeyValuePair 的数组。

【讨论】:

    【解决方案2】:

    生成的代理类好像错了..

    尝试更改它以手动返回所需的Dictionary..

    Dictionary<string, string> GetESGKeywordQuestion()
    {
        //code
    }
    

    这应该允许您使用 WCF 服务中的 GetESGKeywordQuestion() 方法

    【讨论】:

    • 但是为什么生成的代理类是错误的?以及为什么我有 ArrayOfKeyValueOfstringstringKeyValueOfstringstring 数组而不是 ArrayOfKeyValueOfstringKeyValueOfstringstring
    • 但是为什么我必须手动更新代理,为什么返回类型不一样?
    • 可能是因为您在 WCF 服务中进行了更改而没有更新代理。这就是我问你的原因,你更新了代理吗?
    • 我怀疑,如果是这种情况,代理将具有 GetESGKeywordQuestion() 方法的正确返回类型
    • 代理方法中返回的类型被ArrayOfKeyValueOfstringKeyValueOfstringstring数组替换,ArrayOfKeyValueOfstringstringKeyValueOfstringstring类包含key和value两个属性,代表字典
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-23
    • 1970-01-01
    • 1970-01-01
    • 2012-05-19
    相关资源
    最近更新 更多