所以我在过去的几个小时里一直在调查这个问题,很明显我不是唯一一个。为什么我的字典和列表作为数组返回?
我知道为了兼容性,默认使用数组。WCF 有意识地努力远离 .Net 依赖。但是我的服务器和客户端都是用 C# .Net 开发的,所以我没事。
以下是仅针对 StackOverflow 的类似问题的示例:
- WCF 服务返回数组而不是列表
- 为什么 WCF 返回 myObject[] 而不是我期望的 List?
- WCF 服务返回一个字典数组
- WCF 代理返回数组而不是列表,即使集合类型 == Generic.List
- WCF返回数组而不是列表即使集合类型== Generic.List
- 为什么我的 WCF 服务返回和 ARRAY 而不是 List ?
- 使用 svcutil.exe 生成的 WCF 服务代理中的数组而不是列表
我设置了什么:
我正在通过以下命令生成代理:
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin>svcutil.exe /language:cs
/out:generatedProxy.cs /config:app.config /ct:System.Collections.Generic.List`1
http://192.168.0.99:9000/ProjectDatabase/??
我的服务合同如下所示:
[ServiceContract]
public interface IMyContract
{
[OperationContract]
[ServiceKnownType(typeof(Dictionary<int, string>))]
Dictionary<int, string> getClassDictionary();
}
我的实现:
public Dictionary <int, string> getClassDictionary()
{
Dictionary<int, string> myDict = new Dictionary<int, string>();
myDict.Add(1, "Geometry");
myDict.Add(2, "Algebra");
myDict.Add(3, "Graph Theory");
return myDict;
}
即使在我的Reference.svcmap
我有:
<CollectionMappings>
<CollectionMapping TypeName="System.Collections.Generic.List`1" Category="List" />
</CollectionMappings>
然而,尽管我尽了最大的努力和研究,我仍然得到:
Dictionary<'int, string'> 返回为 ArrayOfKeyValueOfintstringKeyValueOfintstring[]
和:
List<'T'> 返回为 T[]
我觉得我已经尝试了一切并且做对了一切,但我必须遗漏一些东西。那是什么?感谢您的时间、帮助和考虑。
更新:
我什至尝试了Array
通过编写 aserializable
struct
并将它们添加到数组来解决强制执行的方法。
[Serializable]
public struct KeyValuePair<K, V>
{
public K Key { get; set; }
public V Value { get; set; }
}
但是,当我返回KeyValuePair<int, string>[]
. 我的代理正在生成KeyValuePairOfintstring[]
.
解决办法贴在下面。