使用JSON.net序列化Dictionary ?

我正在尝试使用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变量?

我也对序列化字典的其他策略持开放态度。

这是为Dictionary生成JSON的正确方法。 原因是JSON 要求所有键都是带引号的字符串文字 。

JS在这方面稍微宽松一些:但JSON是JS对象文字的限制forms。 在任何情况下, JavaScript中的所有属性名称都是字符串 。 (它们会根据需要进行隐式转换。)因此, ({1: 2})["1"])({"1": 2})[1])在JS中同样有效(并且都评估为2 ),但只有{"1": 2}是有效的JSON。

如果要反序列化的目标类型是Dictionary那么它将自动处理int ,IIRC中键的转换。

我不知道如何让JSON.NET直接生成非JSON ;-)可以通过循环顶级构造来完成,例如每个KeyValuePair并为每个人生成JSON条目以及“修改的”JS代码:

 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”。

快乐的编码。