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

使用Newtonsoft.Json更新反序列化类单个值并保留其余原值的实现咨询

实现方案

你遇到的核心问题是Data类中的所有属性都声明为了静态(static),静态属性属于类本身而非实例对象,反序列化得到的GV.Root实例里的data对象的属性值不会同步到静态属性上,这是你无法正常修改单个属性的核心原因。

步骤1:修正实体类定义

先移除Data类所有属性的static修饰符:

public class GV
{
  public class Data
  {
    [JsonProperty("pathForNESPosters")]
    public string PathForNESPosters { get; set; }
    [JsonProperty("pathForSNESPosters")]
    public string PathForSNESPosters { get; set; }
    [JsonProperty("pathForSEGAPosters")]
    public string PathForSEGAPosters { get; set; }
    [JsonProperty("pathToNESContent")]
    public string PathToNESContent { get; set; }
    [JsonProperty("pathToSNESContent")]
    public string PathToSNESContent { get; set; }
    [JsonProperty("pathToSEGAContent")]
    public string PathToSEGAContent { get; set; }
    [JsonProperty("lastSavedVolume")]
    public double LastSavedVolume { get; set; }
  }

  public class Root
  {
    public Data data { get; set; }
  }
}

步骤2:修改单个属性值

你反序列化得到的myDeserializedClass就是已经加载了所有JSON值的实例,直接修改它内部的属性即可,不需要重新new整个类,其余属性值会自动保留:

// 仅修改指定属性,不影响其他原有属性值
myDeserializedClass.data.PathToNESContent = "new value here";

步骤3:序列化写回文件

序列化时会自动保留所有未修改的原有属性值,直接覆盖原文件即可:

// Formatting.Indented参数用于保留JSON格式化缩进,和原文件格式保持一致
string outputJson = JsonConvert.SerializeObject(myDeserializedClass, Formatting.Indented);
// 建议用Path.Combine拼接路径,避免不同系统斜杠兼容问题
string jsonFilePath = Path.Combine(currentAssemblyPath, @"Resources\dataForLinks.json");
File.WriteAllText(jsonFilePath, outputJson);

如果你需要全局共享这个配置对象,可以把myDeserializedClass声明为全局静态变量,而不是把实体类的属性设为静态,这样既可以全局访问修改,也不会影响序列化/反序列化逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 12:45:02