使用Newtonsoft在JObject中正确添加属性的实现方法
解决JObject层级转换问题
这问题我之前处理过,核心思路就是把.分隔的节点路径拆分成层级结构,再把响应值挂载到最底层的节点上。用Newtonsoft.Json的JObject就能轻松实现,给你看完整的代码示例:
using Newtonsoft.Json.Linq; // 解析原始的JObject var originalJObj = JObject.Parse(@"{""Node"": ""Fruit.Color"", ""Response"": ""Green""}"); // 提取路径字符串和目标值 var nodePath = originalJObj["Node"].Value<string>(); var responseValue = originalJObj["Response"]; // 把路径按`.`拆分成节点数组 var nodeSegments = nodePath.Split('.'); // 初始化目标JObject var targetJObj = new JObject(); JObject currentLayer = targetJObj; // 遍历节点数组,逐层构建嵌套结构 for (int i = 0; i < nodeSegments.Length; i++) { var segment = nodeSegments[i]; if (i == nodeSegments.Length - 1) { // 最后一个节点,直接赋值 currentLayer[segment] = responseValue; } else { // 创建子层级JObject,切换到下一层继续处理 var childJObj = new JObject(); currentLayer[segment] = childJObj; currentLayer = childJObj; } } // 输出结果,就是你要的结构 Console.WriteLine(targetJObj.ToString());
代码逻辑说明
- 先从原始JObject里取出
Node的路径字符串和Response的值; - 用
Split('.')把路径拆成单个节点名称的数组,比如"Fruit.Color"会变成["Fruit", "Color"]; - 从根JObject开始,逐个创建子JObject层级,直到最后一个节点,把响应值赋值给它;
- 这个方法还支持更长的路径,比如
"Fruit.Type.Name",能自动生成三层嵌套的结构。
内容的提问来源于stack exchange,提问作者brechtvhb
相关产品推荐
相关产品推荐

