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

如何遍历List<JsonElement>并设置对象属性值?

解决思路

JsonElement是System.Text.Json中的只读不可变结构,它仅作为JSON数据的只读视图存在,无法直接修改其属性值。要实现修改,需先将其转换为可变的JSON对象类型,修改后再替换原集合中的元素。

方案一:使用.NET 6+ 内置的JsonObject

JsonObject是System.Text.Json在.NET 6及以上版本提供的可变JSON对象类型,步骤如下:

  • 遍历集合时通过索引访问元素(避免foreach的副本问题)
  • 确认当前JsonElement是对象类型后,反序列化为JsonObject
  • 修改JsonObject的属性
  • 将修改后的JsonObject重新序列化为JsonElement,替换原集合中的元素

代码示例:

List<JsonElement> exportExported = GetDatas();
for (int i = 0; i < exportExported.Count; i++)
{
    JsonElement element = exportExported[i];
    // 确保当前元素是JSON对象
    if (element.ValueKind == JsonValueKind.Object)
    {
        // 转换为可变JsonObject
        using JsonObject jsonObj = element.Deserialize<JsonObject>();
        if (jsonObj != null)
        {
            // 设置目标属性值
            jsonObj["reference"] = "test";
            // 转回JsonElement并替换原元素
            exportExported[i] = JsonSerializer.SerializeToElement(jsonObj);
        }
    }
    System.Threading.Thread.Sleep(2500);
}

方案二:使用Newtonsoft.Json的JObject(兼容.NET 5及以下)

如果项目依赖Newtonsoft.Json(Json.NET),可以借助JObject的可变性来实现:

  • 将JsonElement转换为JObject
  • 修改JObject的属性
  • 将修改后的JObject序列化为字符串,再反序列化为JsonElement替换原元素

代码示例:

List<JsonElement> exportExported = GetDatas();
for (int i = 0; i < exportExported.Count; i++)
{
    JsonElement element = exportExported[i];
    if (element.ValueKind == JsonValueKind.Object)
    {
        // 转换为JObject
        JObject jObj = JObject.Parse(element.GetRawText());
        // 修改属性
        jObj["reference"] = "test";
        // 转回JsonElement
        string updatedJson = jObj.ToString();
        exportExported[i] = JsonSerializer.Deserialize<JsonElement>(updatedJson);
    }
    System.Threading.Thread.Sleep(2500);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 17:11:14