在 c# 中编辑 JSON 文件值而不覆盖它

Edit JSON file values without overwriting it in c#

我有这段代码,我想编辑 json 值,但是当我使用类似这段代码的东西时,另一个值变为“空”,我不想覆盖它,我需要编辑 json值。

class cfg
{
        static void Main(string[] args)
        {
            generate_def();
            editvalues();
        }

        public static string defaultvalue = "off";

        public class Data
        {
            public string value { get; set; }
            public string value2 { get; set; }
        }

        public static void generate_def()
        {
            List<Data> _data = new List<Data>();
            _data.Add(new Data()
            {
                value = defaultvalue,
                value2 = defaultvalue,
            });

            string json = JsonConvert.SerializeObject(_data.ToArray());
            System.IO.File.WriteAllText("sample.json", json);
        }

        public static void editvalues()
        {
            List<Data> _data = new List<Data>();
            _data.Add(new Data()
            {
                value = "off",
            });

            string json = JsonConvert.SerializeObject(_data.ToArray());
            System.IO.File.WriteAllText("sample.json", json);
        }
}

我的 json 文件来自这个

[{"value":"off","value2":"off"}]

至此

[{"value":"on","value2":null}]

我想要

[{"value":"on","value2":"off"}]

您在每次编辑时都会覆盖现有值,因为您正在编写一个新数据对象,该对象没有文件中已存在内容的任何上下文。

为了得到你想要的,你应该先读取现有的文件内容,将它们转换成你的数据对象,修改你想要改变的值,然后将该数据对象写入文件。

你必须在更改前解析 json

public static void editvalues()
{
    var json = File.ReadAllText("sample.json");
    Data[] data = JsonConvert.DeserializeObject<Data[]>(json);
    data[0].value = "on";
    json = JsonConvert.SerializeObject(data);
    File.WriteAllText("sample.json", json);
}

或这个

public static void editvalues()
{
    var json = File.ReadAllText("sample.json");

    var jsonArray= JArray.Parse(json);
    jsonArray[0]["value"] = "on";

    WriteAllText("sample.json", jsonArray.ToString());
}