我正在尝试使用 JSON.net 序列化字典。
Using
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 的正确方法Dictionary<int,...>
。原因是JSON requires所有键都是带引号的字符串文字.
JS 在这方面稍微宽松一些:但是 JSON 是 JS 对象字面量的受限形式。任何状况之下,JavaScript 中的所有属性名称都是字符串。 (它们根据需要隐式转换。)因此,({1: 2})["1"])
and ({"1": 2})[1])
在 JS 中同样有效(并且两者都评估为2
), 但只有{"1": 2}
是有效的 JSON。
如果要反序列化回的目标类型是Dictionary<int,...>
然后它会自动处理键中的转换int
, IIRC.
我不知道有什么方法可以让 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)));
}
Where Emit
是用来收集输出的任何东西...不过,如果可能的话,我建议“只是普通的 JSON”。
快乐编码。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)