我正在尝试更新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);
原文地址:https://www.jb51.cc/csharp/92319.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。