无法将JSON Node更新为字符串值:C#中my_location节点替换问题
解决JSON节点赋值后变成字符串而非数组的问题
你遇到的核心问题很典型:直接把JSON格式的字符串string2赋值给jsonObj节点时,Newtonsoft.Json会把它当作普通文本处理,自动给它加上引号,导致my_location数组里只塞了一个字符串元素,而不是你想要的多个地址对象。
解决步骤
1. 清理并反序列化string2
你的string2首尾带了多余的双引号(开头是" {,结尾是}"),得先把这些无效字符去掉,再把它反序列化成JArray(Newtonsoft.Json专门处理JSON数组的类型),这样框架才能识别这是一组对象,不是普通文本。
2. 用反序列化后的数组替换目标节点
把解析好的JArray赋值给目标节点,而不是直接扔字符串。
完整修改后的C#代码
using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System.IO; // 读取原始JSON文件 string RequestData = File.ReadAllText("UpdatedRecord.json"); dynamic jsonObj = JsonConvert.DeserializeObject(RequestData); // 步骤1:清理string2首尾的引号,再解析成JArray string cleanedString2 = string2.Trim('"'); JArray addressArray = JArray.Parse(cleanedString2); // 步骤2:把解析好的数组赋值给目标节点 jsonObj[allNode[0]][allNode[1]][0][allNode[2]][0] = addressArray; // 可选:把修改后的JSON写回文件 string updatedJson = JsonConvert.SerializeObject(jsonObj, Formatting.Indented); File.WriteAllText("UpdatedRecord.json", updatedJson);
为什么这样能解决问题?
- 清理首尾引号是为了让
JArray.Parse()能正确识别JSON结构,不然会因为多余的引号解析失败。 JArray.Parse()把JSON字符串转换成了框架能识别的数组对象,赋值后会自动按照JSON数组的格式输出,不会再把它当成字符串处理。
最终输出效果
修改后,my_location节点会变成你期望的格式:
"my_location": [ { "my_address_type": "AAA", "my_address-street": "601 XX street", "my_address-suburb": "XXX", "my_address-postcode": "XX", "my_address-state": "XX" },{ "my_address_type": "BBB", //changed "my_address-street": "601 XX street", "my_address-suburb": "XXX", "my_address-postcode": "XX", "my_address-state": "XX" } ]
内容的提问来源于stack exchange,提问作者Timothy Rajan
相关产品推荐
相关产品推荐

