gpt4 book ai didi

c# - 无法更新 JToken 值

转载 作者:太空狗 更新时间:2023-10-29 17:44:22 25 4
gpt4 key购买 nike

我正在尝试更新 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 中更新,这意味着局部变量正在更新,但更改未反射(reflect)在主要作业中。

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

最佳答案

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

关于c# - 无法更新 JToken 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41603025/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com