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

如何通过C#(NewtonSoft)程序化更新JSON数组及子层级属性?

使用NewtonSoft.Json在C#中程序化更新JSON数组与子属性

嘿,我来帮你搞定这个需求!结合你给出的JSON结构和技术环境(Visual Studio C# + NewtonSoft.Json),我整理了两种实用的实现方案,你可以根据项目需求灵活选择。

1. 先搞定依赖

首先确保你的项目已经安装了NewtonSoft.Json包,直接通过NuGet就能装:

  • 对于传统.NET Framework,在NuGet包管理器控制台输入:
    Install-Package Newtonsoft.Json
    
  • 对于.NET Core/.NET 5+,用CLI命令:
    dotnet add package Newtonsoft.Json
    

2. 方案一:强类型实体类(推荐,类型更安全)

如果你的JSON结构相对固定,定义对应的实体类是最佳选择——编译时就能发现错误,后续维护也更方便。根据你的JSON示例,我们可以定义这些类:

public class DeviceConfig
{
    public string model { get; set; }
    public string make { get; set; }
    public List<string> alias { get; set; }
    public Variables variables { get; set; }
}

public class Variables
{
    public Temperature temperature { get; set; }
}

public class Temperature
{
    public string dataType { get; set; }
    public Unit unit { get; set; }
    public int min { get; set; }
    public int max { get; set; }
    public string description { get; set; }
}

public class Unit
{
    public string value { get; set; }
    public List<string> @enum { get; set; } // 因为enum是C#关键字,加个@避免语法冲突
}

接下来就是加载、更新、保存的完整流程:

using Newtonsoft.Json;
using System.IO;

// 1. 读取JSON文件内容
string jsonPath = @"你的JSON文件路径,比如C:\config.json";
string rawJson = File.ReadAllText(jsonPath);
// 反序列化为强类型对象
DeviceConfig config = JsonConvert.DeserializeObject<DeviceConfig>(rawJson);

// 2. 更新alias数组——这里给你几个常用操作示例
config.alias.Add("new_alias_01"); // 新增一个别名
config.alias.Remove("sample"); // 移除指定的别名元素
// 要是想直接替换整个数组也很简单:
// config.alias = new List<string> { "alias_a", "alias_b", "alias_c" };

// 3. 更新子JSON属性——比如修改温度的最大值、单位和描述
config.variables.temperature.max = 350; // 把max从300改成350
config.variables.temperature.unit.value = "°F"; // 切换单位为华氏度
config.variables.temperature.description = "电机外部检测到的表层温度(已更新)"; // 修改描述文本

// 4. 序列化回JSON并保存到文件
string updatedJson = JsonConvert.SerializeObject(config, Formatting.Indented);
File.WriteAllText(jsonPath, updatedJson);

3. 方案二:动态JObject(灵活,无需定义实体类)

如果你的JSON结构经常变动,或者不想写一堆实体类,用JObject动态处理就很方便:

using Newtonsoft.Json.Linq;
using System.IO;

// 1. 加载JSON为JObject
string jsonPath = @"你的JSON文件路径";
JObject config = JObject.Parse(File.ReadAllText(jsonPath));

// 2. 更新alias数组
JArray aliasArray = (JArray)config["alias"];
aliasArray.Add("dynamic_alias"); // 新增元素
// 移除指定元素:先找到要删的项再移除
var itemToRemove = aliasArray.FirstOrDefault(item => item.ToString() == "sample");
if (itemToRemove != null)
    aliasArray.Remove(itemToRemove);
// 替换整个数组的话:
// config["alias"] = new JArray("dyn_1", "dyn_2");

// 3. 更新子属性
config["variables"]["temperature"]["max"] = 350;
config["variables"]["temperature"]["unit"]["value"] = "°F";
config["variables"]["temperature"]["description"] = "动态更新后的温度描述";

// 4. 保存更新后的JSON
string updatedJson = config.ToString(Formatting.Indented);
File.WriteAllText(jsonPath, updatedJson);

小提示

  • 用Formatting.Indented序列化可以让保存后的JSON保持缩进格式,可读性更好
  • 如果JSON字段名和C#属性名不一致,强类型方案里可以用[JsonProperty]特性映射,比如[JsonProperty("make")] public string Brand { get; set; }
  • 操作数组时,JArray提供了Insert、Clear等方法,按需使用就行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:41:50