更改JSON文件中的值(写入文件)

我的应用程序的Release文件夹中有一个settings.json文件。 我想要做的是更改它的值,而不是暂时,永久..这意味着,删除旧条目,写一个新条目并保存它。

这是JSON文件的格式

{ "Admins":["234567"], "ApiKey":"Text", "mainLog": "syslog.log", "UseSeparateProcesses": "false", "AutoStartAllBots": "true", "Bots": [ { "Username":"BOT USERNAME", "Password":"BOT PASSWORD", "DisplayName":"TestBot", "Backpack":"", "ChatResponse":"Hi there bro", "logFile": "TestBot.log", "BotControlClass": "Text", "MaximumTradeTime":180, "MaximumActionGap":30, "DisplayNamePrefix":"[AutomatedBot] ", "TradePollingInterval":800, "LogLevel":"Success", "AutoStart": "true" } ] } 

假设我想更改密码值而不是BOT PASSWORD我希望它只是密码。 我怎么做?

这是一个简单而廉价的方法(假设.NET 4.0及以上版本):

 string json = File.ReadAllText("settings.json"); dynamic jsonObj = Newtonsoft.Json.JsonConvert.DeserializeObject(json); jsonObj["Bots"][0]["Password"] = "new password"; string output = Newtonsoft.Json.JsonConvert.SerializeObject(jsonObj, Newtonsoft.Json.Formatting.Indented); File.WriteAllText("settings.json", output); 

使用dynamic可以非常简单地将索引直接索引到json对象和数组中。 但是,您确实会在编译时检查中失败。 对于快速和肮脏它真的很好,但对于生产代码,你可能想要完全充实的类,根据@ gitesh.tyagi的解决方案。

您必须具有类以将json值实例化为:

 public class Bot { public string Username { get; set; } public string Password { get; set; } public string DisplayName { get; set; } public string Backpack { get; set; } public string ChatResponse { get; set; } public string logFile { get; set; } public string BotControlClass { get; set; } public int MaximumTradeTime { get; set; } public int MaximumActionGap { get; set; } public string DisplayNamePrefix { get; set; } public int TradePollingInterval { get; set; } public string LogLevel { get; set; } public string AutoStart { get; set; } } public class RootObject { public List Admins { get; set; } public string ApiKey { get; set; } public string mainLog { get; set; } public string UseSeparateProcesses { get; set; } public string AutoStartAllBots { get; set; } public List Bots { get; set; } } 

回答你的问题(未经测试的代码):

 //Read file to string string json = File.ReadAllText("PATH TO settings.json"); //Deserialize from file to object: JsonConvert.PopulateObject(json, RootObject); //Change Value RootObject.Bots[0].Password = "password"; // serialize JSON directly to a file again using (StreamWriter file = File.CreateText(@"PATH TO settings.json")) { JsonSerializer serializer = new JsonSerializer(); serializer.Serialize(file, RootObject); }