WPF/C# 用 Newtonsoft 在重写 .json 之前有一个条件(if / else)(真 / 假值)

Posted

技术标签:

【中文标题】WPF/C# 用 Newtonsoft 在重写 .json 之前有一个条件(if / else)(真 / 假值)【英文标题】:WPF/C# With Newtonsoft have a condition (if / else) before rewriting .json (true / false value) 【发布时间】:2021-12-15 19:46:35 【问题描述】:

我是一个初学者,在 WPF 应用程序中,我只需要在几个值上重写一个外部 json。值只有“真”和“假”。 像这样:


  "option1": false,
  "option2": false,
  "option3": true,

我只使用按钮,例如“激活”、“停用”

使用 NewtonSoft.Json 我找到了这个方法,它可以很好地修改 json,但我不知道如何创建一个条件,以便如果值已经是“真”,那么消息框会显示“值已经真的”。

 private void Activate_Click(object sender, RoutedEventArgs e)
        
            string myfile = "myfile.json";

            if (File.Exists(myfile))
            
                string jsonString = File.ReadAllText(myfile);
                JObject jObject = JsonConvert.DeserializeObject(jsonString) as JObject;
                JToken jToken = jObject.SelectToken("option1");
                jToken.Replace(true);
                string updatedJsonString = jObject.ToString();
                File.WriteAllText(myfile, updatedJsonString);
                MessageBox.Show("Option true");
            
            else
            
                MsgError();
            

        

提前感谢您的帮助:)

【问题讨论】:

我在 json 中看到 option1 在代码中看到 enableoption1。你确定这些是正确的? 抱歉,复制错误^^ 只需将您的 jtoken 转换为 bool。 这能回答你的问题吗? converting json bool values to C# bool values 【参考方案1】:

只需将 jToken 转换为 bool

    if((bool)jToken)
    
       MessageBox.Show("Option1 is true");
    

【讨论】:

谢谢!如果我这样写,看起来效果很好。 if ((bool)jToken is false) // message 但这是个好方法吗? 或者你可以这样写 (!(bool)jToken) 或者用 == 或 != true 代替 "is"。 但我总是更喜欢这个 (!(bool)token)

以上是关于WPF/C# 用 Newtonsoft 在重写 .json 之前有一个条件(if / else)(真 / 假值)的主要内容,如果未能解决你的问题,请参考以下文章

第三节:框架前期准备篇之利用Newtonsoft.Json改造MVC默认的JsonResult

C# 用Newtonsoft.Json 修改 添加 JSON

Newtonsoft.Json高级用法

Newtonsoft.Json在转换指定时间格式时默认是UTC时间

C# 用Newtonsoft.Json 修改 添加 JSON

序列化-Newtonsoft.Json