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

.NET Core中如何更新嵌套JSON文件指定属性并保留结构

修改.NET Core项目中嵌套JSON的Delay属性方案

针对你的嵌套JSON结构,下面分别给出System.Text.Json(.NET Core默认内置库)和Newtonsoft.Json两种工具的实现方案,同时说明对应的数据结构选择。


方案一:使用System.Text.Json(推荐,无需额外安装)

方式1:强类型绑定(规范且易维护)

先定义与JSON结构完全匹配的实体类,通过序列化/反序列化修改属性:

// 定义对应JSON结构的实体类
public class AppSettings
{
    public LoggingConfig Logging { get; set; }
    public ParametersConfig Parameters { get; set; }
}

public class LoggingConfig
{
    public LogLevelConfig LogLevel { get; set; }
}

public class LogLevelConfig
{
    public string Default { get; set; }
    // 用特性映射带点的键名
    [System.Text.Json.Serialization.JsonPropertyName("Microsoft.Hosting.Lifetime")]
    public string MicrosoftHostingLifetime { get; set; }
}

public class ParametersConfig
{
    public int Delay { get; set; }
}

然后执行读取、修改、写入操作:

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

// 读取JSON文件路径(根据你的实际路径调整)
var jsonFilePath = Path.Combine(AppContext.BaseDirectory, "appsettings.json");
var originalJson = File.ReadAllText(jsonFilePath);

// 反序列化为强类型对象
var settings = JsonSerializer.Deserialize<AppSettings>(originalJson);

// 修改Delay属性
settings.Parameters.Delay = 2000; // 替换为你需要的值

// 序列化回格式化后的JSON并写入文件
var serializeOptions = new JsonSerializerOptions { WriteIndented = true };
var updatedJson = JsonSerializer.Serialize(settings, serializeOptions);
File.WriteAllText(jsonFilePath, updatedJson);

方式2:动态修改(无需定义实体类,.NET 6+支持)

如果不想定义实体类,可以用JsonNode直接操作JSON节点:

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

var jsonFilePath = Path.Combine(AppContext.BaseDirectory, "appsettings.json");
var originalJson = File.ReadAllText(jsonFilePath);

// 解析为可操作的JSON节点
var jsonNode = JsonNode.Parse(originalJson);

// 直接修改嵌套的Delay属性
jsonNode["Parameters"]["Delay"] = 2000;

// 写入修改后的JSON
var serializeOptions = new JsonSerializerOptions { WriteIndented = true };
File.WriteAllText(jsonFilePath, jsonNode.ToJsonString(serializeOptions));

方案二:使用Newtonsoft.Json(需额外安装)

如果你的项目依赖Newtonsoft.Json,或需要其高级特性,可以按以下步骤操作:

  1. 先安装NuGet包:
Install-Package Newtonsoft.Json

方式1:强类型绑定

实体类定义(用Newtonsoft的特性):

public class AppSettings
{
    public LoggingConfig Logging { get; set; }
    public ParametersConfig Parameters { get; set; }
}

public class LoggingConfig
{
    public LogLevelConfig LogLevel { get; set; }
}

public class LogLevelConfig
{
    public string Default { get; set; }
    [Newtonsoft.Json.JsonProperty("Microsoft.Hosting.Lifetime")]
    public string MicrosoftHostingLifetime { get; set; }
}

public class ParametersConfig
{
    public int Delay { get; set; }
}

读取修改代码:

using Newtonsoft.Json;
using System.IO;

var jsonFilePath = Path.Combine(AppContext.BaseDirectory, "appsettings.json");
var originalJson = File.ReadAllText(jsonFilePath);

var settings = JsonConvert.DeserializeObject<AppSettings>(originalJson);
settings.Parameters.Delay = 2000;

var updatedJson = JsonConvert.SerializeObject(settings, Formatting.Indented);
File.WriteAllText(jsonFilePath, updatedJson);

方式2:动态修改(用JObject)

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

var jsonFilePath = Path.Combine(AppContext.BaseDirectory, "appsettings.json");
var originalJson = File.ReadAllText(jsonFilePath);

var jObject = JObject.Parse(originalJson);
jObject["Parameters"]["Delay"] = 2000;

var updatedJson = jObject.ToString(Formatting.Indented);
File.WriteAllText(jsonFilePath, updatedJson);

工具选择建议

  • 优先用System.Text.Json:.NET Core 3.0+内置,无需额外依赖,性能优异,满足大部分常规场景需求。
  • 选Newtonsoft.Json:如果需要处理复杂序列化逻辑(如自定义转换器、旧项目兼容、更灵活的配置),再考虑安装使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 17:32:50