[英]Why does replacing a JToken not update the token itself?
如果我JToken
來自 JObject 的JObject
,當我替換該JToken
時,為什么即使JObject
更新它也不會更新?
以這段代碼為例:
using Newtonsoft.Json.Linq;
using System;
namespace TestingSolution
{
public static class Program
{
private const string TestJson =
@"{
""name"": ""Test Json"",
""values"": {
""SomeValue"": ""12345""
}
}";
public static void Main()
{
JObject parsedJson = JObject.Parse(TestJson);
JToken values = parsedJson.SelectToken("values");
values.Replace(JToken.Parse("{\"SomeValue2\": \"98765\"}"));
Console.WriteLine("===== parsedJson =====");
Console.WriteLine(parsedJson.ToString());
Console.WriteLine("\n======= values =======");
Console.WriteLine(values.ToString());
Console.ReadLine();
}
}
}
當它運行時,它將 output 如下:
===== parsedJson =====
{
"name": "Test Json",
"values": {
"SomeValue2": "98765"
}
}
======= values =======
{
"SomeValue": "12345"
}
為什么values
object 中有舊數據?
使用Newtonsoft.Json
版本13.0.1
因為是這樣設計的。 正如文檔JToken.Replace
中所說:
用指定的標記替換此標記。
即整個令牌被父容器中的新令牌替換,保持令牌“值”完好無損。 請注意,令牌會發生變化 - Path
, Parent
, Root
等屬性將更改為相應的新值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.