簡體   English   中英

無法更新 JToken 值

[英]Unable to update JToken value

我正在嘗試更新 JToken 的值,但它的引用沒有更新。

JSON 字符串:

    {
  "Title": "master",
  "Presentation": [
    {      
      "Component": {
        "Content": {
          "Title": "Set New Title",
        }
      }
    }
  ]
}

用法如下

JObject jo = JObject.Parse(File.ReadAllText(file.json));
foreach (var token in jo.SelectTokens("$..Component.Content").Children())
            {
                JProperty prop = token.ToObject<JProperty>();
                prop.Value = "New Title";
            }
string jsonText = JsonConvert.SerializeObject(jo, Formatting.Indented);

在這個例子中,我試圖更新 Title 屬性的值。 它在 foreach 中更新,意味着局部變量正在更新,但更改未反映在主作業中。

如果我做錯了什么,有人可以幫助我嗎?

調用ToObject后,您正在使用副本。 相反,如果您嘗試此操作,它應該可以工作:

JObject jo = JObject.Parse(File.ReadAllText(file.json));
foreach (var prop in jo.SelectTokens("$..Component.Content")
    .Children().OfType<JProperty>())
{
    prop.Value = "New Title";
}
string jsonText = JsonConvert.SerializeObject(jo, Formatting.Indented);

或處理多種類型的JToken

JObject jo = JObject.Parse(File.ReadAllText(file.json));
foreach (var token in jo.SelectTokens("$..Component.Content")
    .Children())
{
    var prop = token as JProperty;
    if (prop != null) prop.Value = "New Title";
    var array = token as JArray;
    if (array != null)
    {
        // some other logic
    }
}

string jsonText = JsonConvert.SerializeObject(jo, Formatting.Indented);

Stuart 的回答可能是錯誤的,因為“內容”可能包含其他子元素,並且所有主題都可以重命名或更改它們的值。

我遇到過類似的問題。 我需要從 body 中刪除 value,因為它太長而無法記錄並且沒有必要,所以我需要更改它的 value。 我可以用像 token["name"] 這樣的索引器來改變它,但是 "name" 可能有不同的情況,所以我需要一種與大小寫無關的通用方式來擦除它的值:

我以其他方式實現它:

var jObject = JObject.Parse(body);

JToken token;
if (jObject.TryGetValue(
    Constants.FieldName,
    StringComparison.InvariantCultureIgnoreCase,
    out token))
{
    var jProperty = token.Parent as JProperty;
    if (jProperty != null)
    {
        jProperty.Value = "removed";
    }

    body = jObject.ToString(Formatting.Indented);
}

這里有一個很好的例子,說明如何以適當的方式做到這一點。 上面的兩種解決方案對我都不起作用,但這很簡單。 只需將 JToken 或 Object 作為數組使用。 就這樣。

https://www.newtonsoft.com/json/help/html/ModifyJson.htm

暫無
暫無

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

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