.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,或需要其高级特性,可以按以下步骤操作:
- 先安装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
相关产品推荐
相关产品推荐

