JSON 文件在将新对象附加到数组后显示额外的反斜杠

JSON file shows extra backslashes after appending a new object to an array

我有一个具有这种结构的 school.json 文件:

{
  "schoolConfig": [

      {
        "schoolTypeCode": "C1",                
        "schools": [
          {
            "schoolId": 456,                  
            "config": [
              {
                "name": "Classes",
                "value": [
                  {
                    "id": 1                           
                  },
                  {
                    "id": 2
                  }
                ]
              }
            ]
          },
          {
            "schoolId": 123,                   
            "config": [
              {
                "name": "Classes",
                "value": [
                  {
                    "id": 11                            
                  }                  
                ]
              }
            ]
          }
        ]
      },
      {
        "schoolTypeCode": "C2",                
        "schools": [
          {
            "schoolId":50,                    
            "config": [
              {
                "name": "Classes",
                "value": [
                  {
                    "id": 12
                  }
                ]
              }
            ]
          },
          {
            "schoolId": 10,                  
            "config": [
              {
                "name": "Classes",
                "value": [                  
                  {
                    "id": 10
                  }
                ]
              }
            ]
          }
        ]
      }    
  ]
}

我想附加到 JSON 文件,该文件将更改任何过滤结果的配置值。因此,例如,输出 JSON 将具有:

"value": [
  {
    "id": 1                           
  },
  {
    "id": 2
  }
  {
    "id": 5
  }
]

为用新的 json 替换现有的 json 而编写的 c# 代码是:

string json = File.ReadAllText(jsonFilePath);
dynamic jsonObj = Newtonsoft.Json.JsonConvert.DeserializeObject(json);
JToken classes = jsonObj.SelectToken("$.schoolConfig[?(@.schoolTypeCode == 'C1')].schools[?(@.schoolId == 456)].config[?(@.name == 'Classes')]");

List<JToken> appList = classes["value"].ToList();

var itemToAdd = new JObject();
itemToAdd["id"] = 5;
appList.Add(itemToAdd);

classes["value"] = Newtonsoft.Json.JsonConvert.SerializeObject(appList).ToString();

string output = Newtonsoft.Json.JsonConvert.SerializeObject(jsonObj, Newtonsoft.Json.Formatting.Indented);
File.WriteAllText(jsonFilePath, output);

文件被修改,除了值显示在一行中(没有缩进或格式)为

"value": "[{\"id\":1},{\"id\":2},{\"id\":5}]"

如何确保 JSON 文件不会在引号前显示额外的反斜杠,并以正确的格式呈现,如上所述。请指教

问题是您从 classes 对象中提取 value 数组作为 List<JToken> 而不是 JArray。然后将列表序列化为字符串,然后再将其添加回 classes。如果只是将其转换为JArray而不是将其转换为List<JToken>,则可以直接修改JArray

更改此行:

List<JToken> appList = classes["value"].ToList();

对此:

JArray appList = (JArray)classes["value"];

并删除这一行:

classes["value"] = Newtonsoft.Json.JsonConvert.SerializeObject(appList).ToString();

工作演示:https://dotnetfiddle.net/TO2zqt