首页 > 解决方案 > 更改特定 JSON 值 (C#)

问题描述

假设我有一个如下所示的 JSON 文件:

    [
  {
    "CheckName": "test2",
    "Times": [
      "0001-01-01T00:00:00",
      "2019-02-27T09:29:39.5654213"
    ]
  },
  {
    "CheckName": "test",
    "Times": [
      "0001-01-01T00:00:00",
      "2019-02-27T09:29:39.574397"
    ]
  }
]

我正在循环如下:

string Config = File.ReadAllText(@"C:\Scripts\Config.json");
dynamic ConfigFile = JsonConvert.DeserializeObject(Config);

foreach (var item in ConfigFile) {
    string CurrentCheck = item.CheckName;
    DateTime LastRun = item.Times[0];
    DateTime NextRun = item.Times[1];
    //Do stuff with the read values here
}

我需要更新 test2 的第一次值,然后,稍后在测试时更新它。但是,这个 JSON 文件中可能有 50 多个项目,我不知道我在文件中的位置,除了通过 foreach 循环(我正在读取 JSON,然后循环遍历它以读取我需要的值,但我需要编写更改)。是否可以在遇到每个特定值时更新它,然后将 JSON 重写回磁盘,同时保留其他值?

或者,我是否可能需要更改 JSON 的外观以简化此任务。

标签: c#.netjson

解决方案


您已将 JSON 反序列化为一个对象,在您的情况下称为 ConfigFile。

您可以对动态对象 ConfigFile 进行更改,然后重新序列化以再次获取 JSON 字符串。

您可能会发现将 JSON 反序列化为对象更容易,而不是使用动态迭代它们,这尤其有助于处理嵌套对象,而不会让您的代码变得非常混乱。

您不知道自己在循环中的位置这一事实并不重要,因为对象(包括嵌套对象)都是引用类型。这意味着尽管您创建了一个名为 的东西item,但它仍然只是对该项目的引用,因此在一个地方修改它会在所有地方修改它。如果这是有道理的。


推荐阅读