gpt4 book ai didi

c# - WCF 返回 ArrayOfKeyValueOfintstringKeyValueOfintstring[] 而不是 Dictionary 和 Array instread List

转载 作者:行者123 更新时间:2023-11-30 12:10:59 26 4
gpt4 key购买 nike

所以在过去的几个小时里,我一直在调查这个问题,很明显,我不是唯一一个。为什么我的字典和列表作为数组返回?

我知道为了兼容性,数组被用作默认值。 WCF 有意识地努力使自己远离对 .Net 的依赖。但是我的服务器和客户端都是用 C# .Net 开发的,所以我没问题。

以下是仅在 StackOverflow 上的类似问题的示例:

  1. WCF service returning array instead of List
  2. Why does WCF return myObject[] instead of List like I wasexpecting?
  3. WCF service returning an array of dictionary
  4. WCF Proxy Returning Array instead of List EVEN THOUGH CollectionType == Generic.List
  5. WCF Returning Array instead of List EVEN THOUGH Collection Type ==Generic.List
  6. Why does my WCF service return and ARRAY instead of a List ?
  7. Array instead of List in WCF Service Proxy Generated usingsvcutil.exe

我设置了什么: Service Reference Configuration

我正在通过此命令生成代理:

 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com