- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以在过去的几个小时里,我一直在调查这个问题,很明显,我不是唯一一个。为什么我的字典和列表作为数组返回?
我知道为了兼容性,数组被用作默认值。 WCF 有意识地努力使自己远离对 .Net 的依赖。但是我的服务器和客户端都是用 C# .Net 开发的,所以我没问题。
以下是仅在 StackOverflow 上的类似问题的示例:
我设置了什么:
我正在通过此命令生成代理:
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/??
我的服务契约(Contract)如下所示:
[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'> returning as ArrayOfKeyValueOfintstringKeyValueOfintstring[]
和:
List<'T'> returning as T[]
我觉得我已经尝试了所有的事情并且做对了所有事情,但我必须遗漏一些东西。那是什么?感谢您的时间、帮助和考虑。
更新:
我什至尝试过绕过 Array
的方法拼版,写一个serializable
struct
并将它们添加到数组中。
[Serializable]
public struct KeyValuePair<K, V>
{
public K Key { get; set; }
public V Value { get; set; }
}
但是,当我返回 KeyValuePair<int, string>[]
.我的代理正在生成 KeyValuePairOfintstring[]
的返回.
解决方法贴在下面。
最佳答案
好吧,我找到了导致序列化如此粗糙的原因。
在我的 ServiceContract
中,我有以下内容:
[OperationContract]
List<DataTable> ShowTables();
[OperationContract]
DataTable FetchContacts(string filter = "All");
[OperationContract]
DataTable FetchUsers();
[OperationContract]
DataTable FetchDrops();
将其注释掉并重新编译我的 WCF 服务库后,我发现在生成代理时所有内容都适本地序列化/反序列化。
似乎当 svcutil.exe
遇到它不知道如何序列化的东西时,所有的赌注都被取消了。从字面上看,它会忽略您的命令/设置并将所有内容序列化为乱码,如 ArrayOfKeyValueOfinttringKeyValueOfintstring
。因此,如果您收到此错误,您应该问问自己 svcutil.exe
是否能够正确序列化您返回的所有内容。
我希望对我的问题来源的识别能在将来帮助其他人。
关于c# - WCF 返回 ArrayOfKeyValueOfintstringKeyValueOfintstring[] 而不是 Dictionary<int, string> 和 Array instread List,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16657982/
所以在过去的几个小时里,我一直在调查这个问题,很明显,我不是唯一一个。为什么我的字典和列表作为数组返回? 我知道为了兼容性,数组被用作默认值。 WCF 有意识地努力使自己远离对 .Net 的依赖。但是
我是一名优秀的程序员,十分优秀!