代码之家  ›  专栏  ›  技术社区  ›  Vinny

在C#[closed]中更新JSON文件时遇到问题

  •  0
  • Vinny  · 技术社区  · 3 年前

    我在内容下面有一个JSON文件。

    {
      "properties": {
        "workspaceId": "xxxx",
        "logs": [
          {
            "categoryGroup": "allLogs",
            "enabled": false,
            "retentionPolicy": {
              "enabled": false,
              "days": 0
            }
          }
        ],
        "logAnalyticsDestinationType": ""
      }
    }
    

    我试图改变这个物体的价值 工作空间ID 从“xxxx”到字符串LAWorkspaceID的实际值。我正在使用下面的代码,但出现了错误

    系统私有的CoreLib:执行函数时出现异常: 让我们学习。纽顿软件。Json:访问的JObject值的键值无效:0。应为对象属性名。

    string LAWorkSpaceID = "NewValueForMyLAWorkspaceID";
    string json = File.ReadAllText("DisableRequestBody.json");
    dynamic jsonObj = Newtonsoft.Json.JsonConvert.DeserializeObject(json);
    jsonObj["properties"][0]["workspaceId"] = LAWorkSpaceID;
    string output = Newtonsoft.Json.JsonConvert.SerializeObject(jsonObj, Newtonsoft.Json.Formatting.Indented);
    File.WriteAllText("DisableRequestBody.json", output);
    
    2 回复  |  直到 3 年前
        1
  •  0
  •   renzo    3 年前

    “属性”是一个对象,而不是数组。

    试着替换

    jsonObj["properties"][0]["workspaceId"]
    

    具有

    jsonObj["properties"]["workspaceId"]
    

    输出是

    {
      "properties": {
        "workspaceId": "NewValueForMyLAWorkspaceID",
        "logs": [
          {
            "categoryGroup": "allLogs",
            "enabled": false,
            "retentionPolicy": {
              "enabled": false,
              "days": 0
            }
          }
        ],
        "logAnalyticsDestinationType": ""
      }
    }
    
        2
  •  0
  •   Reza Heidari    3 年前

    如果您使用的是动态类型,那么也可以使用以下方法:

    string LAWorkSpaceID = "NewValueForMyLAWorkspaceID";
    string json = File.ReadAllText("DisableRequestBody.json");
    dynamic jsonObj = Newtonsoft.Json.JsonConvert.DeserializeObject(json);
    
    Console.WriteLine(jsonObj.properties.workspaceId);
    Console.WriteLine(jsonObj.properties.logs[0].categoryGroup);
    Console.WriteLine(jsonObj.properties.logs[0].retentionPolicy.enabled);
    

    假设您的JSON数据是:

    "properties": {
    "workspaceId": "NewValueForMyLAWorkspaceID",
    "logs": [
      {
        "categoryGroup": "allLogs",
        "enabled": false,
        "retentionPolicy": {
          "enabled": false,
          "days": 0
        }
      }
    ],
    "logAnalyticsDestinationType": ""
     }
    }
    

    输出:

    Output Console