加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 无法更新JToken值

发布时间:2020-12-15 04:14:21 所属栏目:百科 来源:网络整理
导读:我正在尝试更新JToken的值,但它的引用没有得到更新. JSON字符串: { "Title": "master","Presentation": [ { "Component": { "Content": { "Title": "Set New Title",} } } ]} 用法如下 JObject jo = JObject.Parse(File.ReadAllText(file.json));foreach (v
我正在尝试更新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);

或处理多种类型的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);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读