8

JSON.netを使用して辞書をシリアル化しようとしています。

使用する

JsonConvert.SerializeObject(theDict);

これが私の結果です

{
  "1": {
    "Blah1": false,
    "Blah2": false,
    "Blah3": "None",
    "Blah4": false
  },
  "2": {
    "Blah1": false,
    "Blah2": false,
    "Blah3": "None",
    "Blah4": false
  },
  "3": {
    "Blah1": false,
    "Blah2": false,
    "Blah3": "None",
    "Blah4": false
  },
  ...
  ...
  ...
}  

キーが有効なjavascript変数としてレンダリングされるように、この辞書をシリアル化する方法はありますか?

また、辞書をシリアル化する他の戦略も受け入れています。

4

1 に答える 1

20

これは、のJSONを生成する正しい方法ですDictionary<int,...>。その理由は、JSONではすべてのキーが引用符で囲まれた文字列リテラルである必要があるためです。

JSは、この点でもう少しリラックスしています。ただし、JSONはJSオブジェクトリテラルの制限された形式です。いずれにせよ、JavaScriptのすべてのプロパティ名は文字列です。(これらは必要に応じて暗黙的に変換されます。)したがって、({1: 2})["1"])JS({"1": 2})[1])でも同様に有効です(両方ともに評価されます)が、有効なJSON2のみです。{"1": 2}

デシリアライズして戻すターゲットタイプがである場合、IIRCDictionary<int,...>へのキーの変換が自動的に処理されます。int

JSON.NETで非JSONを直接生成する方法を知りません;-)最上位の構成をループして、たとえばそれぞれをループKeyValuePair<int,...>し、「変更された」JSとともに個々のエントリごとにJSONを生成することで実行できます。コード:

foreach (var p in dict) {
    var k = p.Key;
    var v = p.Value;
    Emit(string.Format(
        "var name{0} = {1};",
        k, JsonConvert.SerializeObject(v)));
}

出力を収集するために使用されるものはどこEmitにありますか...可能であれば、「通常のJSON」をお勧めします。

ハッピーコーディング。

于 2012-04-17T21:55:06.637 に答える