そのため、私はこの問題の調査に数時間を費やしましたが、私だけではないことは明らかです。辞書とリストが配列として返されるのはなぜですか?
互換性のために配列がデフォルトとして使用されていることを理解しています。WCF は、.Net に依存しないように意識的に努力しています。しかし、サーバーとクライアントの両方が C# .Net で開発されているので、問題ありません。
以下は、StackOverflow だけに関する同様の質問のサンプルです。
- リストの代わりに配列を返す WCF サービス
- WCF が期待どおりに List ではなく myObject[] を返すのはなぜですか?
- 辞書の配列を返す WCF サービス
- リストの代わりに配列を返すWCFプロキシコレクションタイプ== Generic.List
- リストの代わりに配列を返すWCFコレクションタイプ== Generic.List
- WCF サービスが List ではなく ARRAY を返すのはなぜですか?
- 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
a を書き込んでserializable
struct
配列に追加することで、面付けを回避する方法を試みました。
[Serializable]
public struct KeyValuePair<K, V>
{
public K Key { get; set; }
public V Value { get; set; }
}
しかし、私が返すときKeyValuePair<int, string>[]
。私のプロキシは のリターンを生成していKeyValuePairOfintstring[]
ます。
解決策は以下に掲載されています。