C# 序列化字典<;int,object>;使用JSON.net?

C# 序列化字典<;int,object>;使用JSON.net?,c#,javascript,json,json.net,C#,Javascript,Json,Json.net,我正在尝试使用JSON.net序列化字典 使用 JsonConvert.SerializeObject(theDict); 这是我的结果 { "1": { "Blah1": false, "Blah2": false, "Blah3": "None", "Blah4": false }, "2": { "Blah1": false, "Blah2": false, "Blah3": "None", "Blah4": f

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


我也愿意接受其他序列化字典的策略。

这是为
字典生成JSON的正确方法。原因是,

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

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

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

其中,
Emit
是用于收集输出的内容。。。不过,如果可能的话,我建议使用“普通JSON”


快乐编码。

它们是有效的。您希望输出是什么样子的?从技术上讲,您的变量[“1”]是有效的。生成的JSON的使用者是什么?如果是javascript,那么只需使用
JSON.parse
将JSON反序列化回JS对象。啊,我明白了。这些是指数而不是变量吗?那么对象[1]和对象1呢?我的解释正确吗?
object[“1”]
不是
object[1]
。我可以从上面的评论和一些研究中猜出同样多的东西,但得到一个非常具体的解释总是很好的。谢谢
foreach (var p in dict) {
    var k = p.Key;
    var v = p.Value;
    Emit(string.Format(
        "var name{0} = {1};",
        k, JsonConvert.SerializeObject(v)));
}