当前位置:  开发笔记 > 编程语言 > 正文

无法更新JToken值

如何解决《无法更新JToken值》经验,为你挑选了1个好方法。

我正在尝试更新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();
                prop.Value = "New Title";
            }
string jsonText = JsonConvert.SerializeObject(jo, Formatting.Indented);

在这个例子中,我正在尝试更新Title属性的值.它在foreach中得到更新,意味着局部变量正在更新,但更改未反映在主要作业中.

如果我做错了什么,有人可以帮助我吗?



1> Stuart..:

一旦你打电话,ToObject你正在使用副本.如果你试试这个,它应该工作:

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

或处理多种类型的JTokens:

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);

推荐阅读
贴进你的心聆听你的世界
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有