簡體   English   中英

為什么替換 JToken 不會更新令牌本身?

[英]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中所說:

用指定的標記替換此標記。

即整個令牌被父容器中的新令牌替換,保持令牌“值”完好無損。 請注意,令牌會發生變化 - PathParentRoot等屬性將更改為相應的新值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM