使用JSON.net序列化Dictionary <int,object>?

Jef*_*ell 5 javascript c# json json.net

我正在尝试使用JSON.net来序列化字典.

运用

JsonConvert.SerializeObject(theDict);
Run Code Online (Sandbox Code Playgroud)

这是我的结果

{
  "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
  },
  ...
  ...
  ...
}  
Run Code Online (Sandbox Code Playgroud)

有没有办法序列化这个字典,以便将键呈现为有效的javascript变量?

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

小智 15

这是生成JSON的正确方法Dictionary<int,...>.原因是JSON 要求所有键都是带引号的字符串文字.

JS在这方面稍微宽松一些:但JSON是JS对象文字的限制形式.在任何情况下,JavaScript中的所有属性名称都是字符串.(根据需要它们隐式转换.)因此,({1: 2})["1"])和({"1": 2})[1])如在JS同样有效(两者计算结果2),但只有{"1": 2}有效JSON.

如果要反序列化的目标类型是,Dictionary<int,...>那么它将自动处理intIIRC中密钥的转换.

我不知道如何让JSON.NET直接生成非JSON ;-)可以通过循环顶层构造来完成,例如每个KeyValuePair<int,...>并为每个单独的条目生成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)));
}
Run Code Online (Sandbox Code Playgroud)

哪里Emit是什么是用来收集输出......我会建议"只是正常的JSON"如果可能的话,虽然.

快乐的编码.

  • 我能够从上面的评论和一些研究中解脱出来,但是得到一个非常具体的解释总是很好.谢谢! (2认同)