在 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());
}
我有这段代码,我想编辑 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());
}