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

标签 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": false
  },
  "3": {
    "Blah1": false,
    "Blah2": false,
    "Blah3": "None",
    "Blah4": false
  },
  ...
  ...
  ...
}  

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

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

最佳答案

这是为 Dictionary<int,...> 生成 JSON 的正确方法.原因是 JSON requires that all keys are quoted-string literals .

JS 在这方面稍微宽松一些:但 JSON 是 JS 对象字面量的一种受限形式。无论如何,JavaScript 中的所有属性名称都是字符串。 (它们根据需要隐式转换。)因此,({1: 2})["1"])({"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)));
}

在哪里Emit是用来收集输出的任何东西......不过,如果可能的话,我会推荐“只是普通的 JSON”。

快乐编码。

关于c# - 使用 JSON.net 序列化 Dictionary<int,object>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10197059/

相关文章:

php - 使用 php 生成脚本或使用 json

javascript - 无法将 javascript 中的 json api 正确打印到 html

json - Angular Base64 文件上传为 JSON

c# - 按钮上的文本居中

c# - 如何合并同一个DataSet中的DataSet表

c# - 是否可以将 C# 9 用于 Xamarin?

javascript - 当整个应用程序完成渲染时,是否有一个可以调用的 meteor 函数

C# - 设置 HttpClient header 以将数据 POST 到 Azure REST API

javascript - 如何从 powerup 中访问 trello API?

javascript - jQuery post 使用express接收数据