Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# wcf中的词典_C#_Asp.net Mvc_Wcf - Fatal编程技术网

C# wcf中的词典

C# wcf中的词典,c#,asp.net-mvc,wcf,C#,Asp.net Mvc,Wcf,我有一个WCF服务,它包含一个返回字典的方法 代理类中生成的方法返回ArrayOfKeyValueOfstringstringKeyValueOfstringstring数组。 我如何使用这个方法 合同方法: [OperationContract] Dictionary<string, string> GetESGKeywordQuestion(); In the proxy class i have ArrayOfKeyValueOfstrin

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

代理类中生成的方法返回ArrayOfKeyValueOfstringstringKeyValueOfstringstring数组。 我如何使用这个方法

合同方法:

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

In the proxy class i have 

ArrayOfKeyValueOfstringstringKeyValueOfstringstring[] GetESGKeywordQuestion()
{
// code
}
[运营合同]
字典GetESGKeywordQuestion();
在代理类中,我有
ArrayOfKeyValueOfStringStringStringKeyValueOfStringString[]GetESGKeywordQuestion()
{
//代码
}

生成的代理类似乎是错误的

尝试更改它以手动返回所需的
词典

Dictionary<string, string> GetESGKeywordQuestion()
{
    //code
}
字典GetESGKeywordQuestion()
{
//代码
}
这应该允许您使用WCF服务中的
GetESGKeywordQuestion()
方法来引用链接
在.NET到.NET通信中。换句话说,如果您希望您的服务被PHP或Java等非点网络应用程序使用,则互操作性较差。如果您在CS中学习/记住了数据结构,则您知道字典是通过非线性结构(如B-tree)实现的,因此字典不太可能包含在WSDL中,因为其复杂性和变体。为客户端生成的ArrayOfKeyValueOfStringStringStringKeyValueOfStringString结构经过了良好的设计和使用。如果您希望看到双方的一致性并希望互操作性,那么不要使用字典,而是使用线性结构,例如KeyValuePair数组。

是否要将字典传递到此方法中并作为数组返回?可能讨论了相同的问题。我无法理解为什么代理类中生成的方法返回ArrayOfKeyValueOfstringstringKeyValueOfstringstring数组,而不是特定于c#的Dictionary
Dictionary
。WSDL需要以其他语言(PHP、JAVA、VB.net等)可以理解的方式描述返回类型。
字典
也可以描述为
KeyValuePair
对象的数组。很可能就是这样。谢谢你的解释,但是为什么生成的代理类是错误的呢?为什么我有ArrayOfKeyValueOfStringStringKeyValueOfStringStringString数组而没有ArrayOfKeyValueOfStringStringKeyValueOfStringStringStringString但为什么我必须手动更新代理,为什么返回类型不同?可能是因为您在WCF服务中进行了更改,而没有更新代理。这就是为什么我问你,你更新了代理吗?我怀疑,如果是这种情况,代理是否会有正确的GetESGKeywordQuestion()返回类型方法代理方法中返回的类型已替换为ArrayOfKeyValueOfstringstringKeyValueOfstringstring数组。ArrayOfKeyValueOfStringKeyValueOfStringString类包含2个属性key和value,表示字典