C# 用NewtonSoft替换Json属性

C# 用NewtonSoft替换Json属性,c#,asp.net-core,json.net,C#,Asp.net Core,Json.net,不知道从哪里开始,所以我没有任何示例代码 我需要更改json文档中属性的名称 var json = (@"{""id"":""12"", ""title"":""My Title"", ""Chunks"":[ { ""id"":""137"", ""title"":""Title"", ""description"":""null"", ""selections"":[

不知道从哪里开始,所以我没有任何示例代码

我需要更改json文档中属性的名称

var json = (@"{""id"":""12"",
   ""title"":""My Title"",
   ""Chunks"":[ 
      { 
         ""id"":""137"",
         ""title"":""Title"",
         ""description"":""null"",
         ""selections"":[ 
            { 
               ""id"":""169"",
               ""title"":""Choice"",
               ""sort_order"":""null"",
               ""questions"":[ 
               ]
            }
         ]
      }
   ]
}
}
}");

我需要将值为12的“id”更改为“document_id”,而不使用其他id。是否有像NewtonSoft这样的C#库允许您更改属性而不是属性值。似乎是一个常见的场景,但我还没有看到任何接近我正在尝试做的事情。我想我可以将json转换为字符串并进行替换,但这似乎不是很优雅

使用
Newtonsoft.Json.Linq.JObject
的方法如下所示:

var obj = JObject.Parse(json);
obj["document_id"] = obj["id"]; // create new property called "document_id"
obj.Remove("id"); // remove the "id" property
Console.WriteLine(obj);

还要注意,您的JSON是无效的。它的末尾有两个额外的
}

假设当可能有多个节点的键为“id”和值为“12”时,您希望替换所有键,您可以使用Linq来标识键为“id”和值为“12”的令牌,然后使用添加/删除方法来创建具有不同名称的新节点

比如说,

JToken node = JToken.Parse(json);
var jObjectsWithTitle = node
    .SelectTokens("$..*")
    .OfType<JObject>()
    .Where(x => x.Property("id") != null &&  Convert.ToInt32(x.Property("id").Value) == 12);

foreach(var item in jObjectsWithTitle)
{
        item.TryGetValue("id",out var currentValue);
        item.Add("document_id",currentValue);
        item.Remove("id");
}
JToken节点=JToken.Parse(json);
var jObjectsWithTitle=节点
.选择代币($..*)
第()类
其中(x=>x.Property(“id”)!=null&&Convert.ToInt32(x.Property(“id”).Value)==12);
foreach(jObjectsWithTitle中的var项)
{
项目TryGetValue(“id”,输出var电流值);
添加(“文件id”,当前值);
项目。删除(“id”);
}
请参阅其中说明了如何遍历JSON对象并对其执行操作。另请参阅: