3

[{"key" : "Microsoft", "value":[{"Key":"Publisher","Value":"abc"},{"Key":"UninstallString","Value":"c:\temp"}]} and so on ]フォームのjson文字列をC#オブジェクトに逆シリアル化しようとしています。

基本的にはの形式Dicionary<string, Dictionary<string, string>>です。Newtonsoftを使用してみましJsonConvert.Deserializeたが、エラーが発生しました。

現在のJSON配列([1,2,3]など)をタイプ'System.Collections.Generic.Dictionary`2 [System.String、System.Collections.Generic.Dictionary`2 [System.String、System.String ]]'型は正しく逆シリアル化するためにJSONオブジェクト(例:{"name": "value"})を必要とするためです。

このエラーを修正するには、JSONをJSONオブジェクト(例:{"name": "value"})に変更するか、逆シリアル化された型を配列またはコレクションインターフェイスを実装する型(例:ICollection、IList)に変更します。 JSON配列から逆シリアル化されます。JsonArrayAttributeを型に追加して、JSON配列から強制的に逆シリアル化することもできます。
パス''、行1、位置1。

それを行う他の方法はありますか?

4

1 に答える 1

6

私が見つけることができる最良の方法は次のとおりです。

string json = @"[{""Key"" : ""Microsoft"", ""Value"":[{""Key"":""Publisher"",""Value"":""abc""},{""Key"":""UninstallString"",""Value"":""c:\temp""}]}]";

var list = JsonConvert.DeserializeObject< List<KeyValuePair<string,List<KeyValuePair<string, string>>>> >(json);

var dict= list.ToDictionary(
         x => x.Key, 
         x => x.Value.ToDictionary(y=>y.Key,y=>y.Value));
于 2012-07-06T14:34:00.980 に答える