如何在C#中用Newtonsoft.Json将嵌套JSON字符串转为树形结构?
解决方法
你可以利用Newtonsoft.Json的JObject和JToken处理这种动态嵌套的JSON结构,无需定义固定类,具体步骤如下:
- 解析外层JSON:将原始JSON字符串解析为
JObject,方便单独操作fields字段。 - 提取并解析内层JSON字符串:取出
fields对应的转义JSON字符串,将其解析为JToken(支持动态的对象或数组类型)。 - 替换字段值:把外层
JObject中的fields值从字符串替换为解析后的JToken。 - 序列化最终结果:将修改后的
JObject序列化为紧凑格式的JSON字符串。
完整代码示例
using Newtonsoft.Json.Linq; // 原始输入的JSON字符串 string originalJson = @"{""fields"": ""{ \""CurrentPage\"": 14, \""CurrentSubPageNo\"": 18, \""IsFileUpload\"": false, \""VisitedPages\"": [ 2, 3, 4, 6, 7, 8, 10, 11, 12, 13, 14 ] }""}"; // 解析外层JSON JObject outerJsonObject = JObject.Parse(originalJson); // 提取fields对应的字符串并解析为JToken string innerFieldsJson = outerJsonObject["fields"].Value<string>(); JToken parsedFields = JToken.Parse(innerFieldsJson); // 替换fields字段的值 outerJsonObject["fields"] = parsedFields; // 生成紧凑格式的最终JSON string finalJson = outerJsonObject.ToString(Newtonsoft.Json.Formatting.None); // 输出结果 Console.WriteLine(finalJson);
这段代码会输出你需要的紧凑格式JSON,同时完全兼容fields内部结构动态变化的场景——不管fields里是对象、数组还是其他JSON类型,JToken都能正确处理。
内容的提问来源于stack exchange,提问作者Reinhardt
相关产品推荐
相关产品推荐

