2011-07-06 4 views
6

JSON連載辞書を返すコントローラGETアクションが必要です。辞書の鍵はプロパティとして2つのプリミティブを持つシンプルなクラスです - ClassOneと呼んでください。しかし、JSONに辞書をしようとしたとき、私は次のエラーが表示されますキーが非文字列オブジェクトの場合、JSONに.NET辞書を使用できますか?

System.Collections.Generic.Dictionary`2[[ClassOne],[ClassTwo]]' is not supported for serialization/deserialization of a dictionary, keys must be strings or objects. 

フレーズ「キーは、文字列またはオブジェクトでなければなりません」そのキーとしてオブジェクトを持っている辞書をシリアル化することが可能であることを意味します。しかし、私はそうする方法を見つけることができません。この状況で私の選択肢は何ですか?

+1

データを「JSON」するために使用しているAPIは何ですか? –

+0

使用しているJSONシリアライゼーションライブラリを指定しなければ、この問題は不完全です。 'DataContractJsonSerializer'を使用して、私はそれを動作させて例外を経験しませんでしたが、JSONはそれがちょっと変わったかもしれませんが(伝えられません)。また、問題を再現する最小のコードサンプルを提供できますか? –

答えて

7

.netからの辞書はJavascriptでハッシュにシリアライズします。ハッシュは文字列をキーとして持つことしかできないため、文字列以外のキーをシリアル化することはできません。おそらく、クリーナーはClassOneToStringオーバーライドを与え、ちょうど上記のコードでk.Key.ToString()を呼び出すことであろう

myDictionary.ToDictionary(k => k.Key.Prop1 + "|" + k.Key.Prop2, v => v.Value); 

:あなたは、単にこのような直列化可能なものにあなたの辞書を変換することができます。

+0

オブジェクトから文字列キーを作成するように見えます。ありがとうございました! – JustOnePixel

関連する問題