You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#如何批量更新JArray中is_closed=false项的属性值

问题根因

你的代码修改不生效和ReplaceAll方法没有关系,核心是两个错误:

  • 调用o.ToObject<JObject>()时会生成原JToken的深拷贝副本,后续所有修改都是在脱离原数组的副本上操作,根本不会同步到原jaOppty对象
  • 循环体内引用了未定义的变量chat,属于笔误,即使副本修改逻辑正常,这里运行时也会直接抛出异常
正确实现方案

首先引入操作Json.NET所需的命名空间:

using Newtonsoft.Json.Linq;

直接遍历原JArray内的对象引用修改即可,不需要做额外的对象转换或者替换操作:

foreach (JObject opptyItem in jaOppty)
{
    // 增加空值和类型校验,避免某一项缺失extras节点或is_closed字段时抛出空引用错误
    if (opptyItem["extras"] is JObject extras 
        && extras["is_closed"]?.Value<bool>() == false)
    {
        extras["is_closed"] = true;
        // 如果需要指定时间格式,可以传入格式化字符串,例:DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
        extras["closed_dt"] = JToken.FromObject(DateTime.Now);
    }
}

执行完上述逻辑后,原jaOppty中所有extras.is_closed = false的项都会被直接更新,直接序列化数组就能看到修改后的结果。


内容的提问来源于stack exchange,提问作者Dondon510

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 20:39:30