-1

私はこの質問がひどく尋ねられたことを知っていますが、既存の答えは私にとって特に役に立ちませんでした。JSONをC#動的オブジェクトに逆シリアル化するのが最善ですか?、しかし、オブジェクトを作成したくないので、辞書を作成したいと思います。

私は自分のデータをそのようにシリアル化し、まったく同じデータ構造に逆シリアル化したいです。

    public static string AugDictToJSON(Dictionary<string, List<Dictionary<string, object>>> dict)
    {
        return string.Join(",", dict.Select(
            d => string.Format("{{ \"{0}\" : [ {1} ] }}", d.Key,
                string.Join(",", d.Value.Select(i => SubAugDictToJSON(i)).ToArray())
            )).ToArray());
    }

    public static string SubAugDictToJSON(Dictionary<string, object> dict)
    {
        return string.Join(",", dict.Select(
                d => string.Format("{{ \"{0}\" : \"{1}\" }}", d.Key, d.Value.ToString())
            ).ToArray());
    }

編集:解決策は次のとおりです(受け入れられた回答から):

public static Dictionary<string, List<Dictionary<string, object>>> JSONToAugDict(string json)
{
    return JsonConvert.DeserializeObject<Dictionary<string, List<Dictionary<string, object>>>>(json);
}
4

2 に答える 2

3

NuGetパッケージ' Newtonsoft.Json 'の使用をお勧めします。

このパッケージは、WebAPIによってシリアル化/逆シリアル化に使用され、非常に高速です。詳細については、http: //james.newtonking.com/pages/json-net.aspxをご覧ください。

var results = JsonConvert.DeserializeObject<dynamic>(json);

または、IDictionaryとして:

var result = JsonConvert.DeserializeObject<IDictionary<string, object>>(json);
于 2012-10-01T17:15:13.787 に答える
1

作業中のアプリケーションにJson.NETを使用して同様のことを試しました(私自身の質問から引用:json文字列をオブジェクトに逆シリアル化する-Silverlight )

JSON

{
    "disclaimer": "This data is collected from various providers and provided free of charge for informational purposes only, with no guarantee whatsoever of accuracy, validity, availability or fitness for any purpose; use at your own risk. Other than that - have fun, and please share/watch/fork if you think data like this should be free!",
    "license": "Data collected from various providers with public-facing APIs; copyright may apply; not for resale; no warranties given.",
    "timestamp": 1334183999,
    "base": "USD",
    "rates": {
                "AED": 3.6732,
                "AFN": 48.400002,
                "ALL": 106.669998,
             }
}

データを保持するオブジェクト:

public class ExchangeData
{
    public string disclaimer { get; set; }
    public string license { get; set; }
    public string timestamp { get; set; }
    public string @base { get; set; }
    public Dictionary<string, double> rates { get; set; }
}

データ構造を作成するには:

StreamReader reader = new StreamReader(args.Result);
ExchangeData data = JsonConvert.DeserializeObject<ExchangeData>(reader.ReadToEnd());

それが役に立てば幸い!

于 2012-10-01T17:44:49.513 に答える