在一个应用程序中,我修改一个外部json,该json包含另一应用程序的几个选项参数。我正在使用Newtonsoft的反序列化来修改不同的行。在一个例子中,我在.xml中使用了<文本框>其中输入数值。它旁边的一个按钮允许您验证数字。
当应用程序启动时,我检索json指示填充TextBox:的内容
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上没有验证检查。这将是一个很好的补充。