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

如何使用System.Text.Json在现有JSON的TestData中添加属性?

在.NET Core 3.0中用System.Text.Json给现有JSON追加属性的解决方案

我明白你现在碰到的问题:想用System.Text.Json给现有JSON的TestData节点里加一个Name属性,但之前用Utf8JsonWriter的写法只是新建了一个独立对象,没有把原有JSON的内容合并进去对吧?

这主要是因为JsonDocument和JsonElement在System.Text.Json里是只读类型,没法直接修改它们。我们得换个思路:读取原有JSON的内容,用Utf8JsonWriter重新构建整个结构,在过程中把新属性加进去。

给你一个可以直接运行的示例代码,完美解决这个需求:

using System;
using System.IO;
using System.Text.Json;

class Program
{
    static void Main()
    {
        // 你的原始JSON字符串
        string originalJson = @"{""TestData"":{""Year__of__Account"":""2019"",""Tax___x0025_"":""0.06"",""Buildings__1"":""1000"",""Contents__1"":""400"",""Total_Insurable_Value"":""100"",""Buildings__Prem"":""2560.8"",""Contents__Prem"":""1707.2"",""YB__1"":""1950"",""No__Buildings"":""55"",""Location_Sprinklers_YN"":""No"",""test"":""test""}}";

        // 解析原始JSON到只读的JsonDocument
        using (JsonDocument doc = JsonDocument.Parse(originalJson))
        {
            JsonElement rootElement = doc.RootElement;
            // 获取目标TestData节点
            JsonElement testDataElement = rootElement.GetProperty("TestData");

            using (MemoryStream memoryStream = new MemoryStream())
            {
                // 配置JsonWriter,开启缩进让输出更美观,可按需调整
                var writerOptions = new JsonWriterOptions { Indented = true };
                using (Utf8JsonWriter jsonWriter = new Utf8JsonWriter(memoryStream, writerOptions))
                {
                    // 开始写入根对象
                    jsonWriter.WriteStartObject();
                    // 写入TestData属性,开始TestData对象
                    jsonWriter.WritePropertyName("TestData");
                    jsonWriter.WriteStartObject();

                    // 遍历原TestData里的所有属性,逐个写入到新的JSON流中
                    foreach (JsonProperty property in testDataElement.EnumerateObject())
                    {
                        property.WriteTo(jsonWriter);
                    }

                    // 在这里添加新的Name属性和值
                    jsonWriter.WriteString("Name", "John");

                    // 结束TestData对象和根对象的写入
                    jsonWriter.WriteEndObject();
                    jsonWriter.WriteEndObject();
                }

                // 将MemoryStream转换为字符串,得到更新后的JSON
                string updatedJson = System.Text.Encoding.UTF8.GetString(memoryStream.ToArray());
                Console.WriteLine(updatedJson);
            }
        }
    }
}

关键说明:

  • 核心思路是复制原有内容+追加新属性:因为原有JSON节点是只读的,我们只能先把原TestData的所有属性都写入到新的JSON流里,再插入我们需要的新属性。
  • 你的原代码没有处理原有TestData的内容,所以才会生成只包含Name的新对象,现在这个写法完美解决了这个问题。
  • 如果以后需要给其他节点添加属性,这个思路也完全通用,只需要调整获取目标节点的代码即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:14:40