WPF/C# Textbox.Text 重写时不要抢引号 json

WPF/C# Textbox.Text Don't grab quotes while rewriting json

在一个应用程序中,我修改了一个外部 json,它包含另一个应用程序的多个选项参数。我正在使用 Newtonsoft 的反序列化来修改不同的行。 一方面,我在 .xaml 中使用了一个 ,其中输入了一个数值。旁边的按钮可让您验证号码。

我在启动应用程序时检索 json 指示填充文本框的内容:

JToken optionnumeric= jObject.SelectToken("option");             
TextBox.Text = optionnumeric.ToString();

用户输入适合自己的数值,点击按钮确认。这是按钮代码:

private void SetNumericValue(object sender, RoutedEventArgs e)
{             
    if (int.Parse(TextBox.Text) > 1000)             
    {                 
    TextBox.Text = "1000";             
    }             
    else if (int.Parse(TextBox.Text) < 1)             
    {                 
    TextBox.Text = "1";             
    }             
    string jsonString = File.ReadAllText("myjson.json");             
    JObject jObject = JsonConvert.DeserializeObject(jsonString) as JObject;             
    JToken jToken = jObject.SelectToken("option");             
    jToken.Replace(TextBox.Text);             
    string updatedJsonString = jObject.ToString();             
    File.WriteAllText("myjson.json", updatedJsonString);         
}

问题是原来在json里面的选项是这样的:

"option": 500,

用应用程序重写时,会添加引号:

"option": "500",

而且我真的不知道如何阻止它使用那些双引号。

首先感谢您花时间阅读我的问题。

提前感谢任何可以帮助我的人。

重写你的代码以挂在你解析的 int 上:

private void SetNumericValue(object sender, RoutedEventArgs e)
{             
    var intValue = int.Parse(TextBox.Text);

    if (intValue > 1000)             
    {                 
        intValue = 1000;             
    }             
    else if (intValue < 1)             
    {                 
        intValue = 1;             
    }             

    string jsonString = File.ReadAllText("myjson.json");             
    JObject jObject = JsonConvert.DeserializeObject(jsonString) as JObject;             
    JToken jToken = jObject.SelectToken("option");             
    jToken.Replace(intValue);             
    string updatedJsonString = jObject.ToString();             
    File.WriteAllText("myjson.json", updatedJsonString);

    TextBox.Text = intValue.ToString();         
}

使用 jToken.Replace(intValue) 将写入不带引号的值,因为它是整数类型。注意 - int.Parse 没有验证检查。补充一下就好了。