c# - 加载对象时的反序列化问题
问题描述
我的目标是通过读取 txt 来设置它们离开的布尔值。
这是我的问题,简单,一步一步;
我通过单击设置按钮将值设置为“true”
在 txt 文件中,JSON 对象成功设置为 true
我关闭并重新运行程序
我希望当前的布尔标志在上一次运行时为“真”
但是它们仍然是错误的,我有一个“反序列化”的问题 Button2_Click_1 只是向我显示了标志的当前值。另一点是,在 txt 文件中,标志仍然是正确的,这似乎还可以。
我更改了反序列化和序列化的顺序,但没有任何改变。
[Serializable]
class Class1
{
public bool flag { get; set; }
public bool flag2 { get; set; }
public Class1()
{
flag = false;
flag2 = false;
}
}
[Serializable]
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Class1 c1 = new Class1();
private void Button1_Click(object sender, EventArgs e)
{
c1.flag = true;
c1.flag2 = true;
//deserialize
string json2 = File.ReadAllText("path.txt");
Class1 f2 = JsonConvert.DeserializeObject<Class1>(json2);
//serialize
string json = JsonConvert.SerializeObject(c1);
File.WriteAllText("path.txt", json);
Console.WriteLine(json);
}
private void Button2_Click_1(object sender, EventArgs e)
{
Console.WriteLine("Current Status of Flag1: "+c1.flag);
Console.WriteLine("Current Status of Flag2: " + c1.flag2);
}
解决方案
如果在应用程序启动时单击 Button2 而没有先单击 Button1,则 c1 默认为 false,因为布尔值的默认值为 false。如果您希望在单击 Button2 时加载 json,请在 Console.WriteLine 上方添加以下代码:
c1 = JsonConvert.DeserializeObject<Class1>(File.ReadAllText("path.txt"));
使它变成
private void Button2_Click_1(object sender, EventArgs e)
{
c1 = JsonConvert.DeserializeObject<Class1>(File.ReadAllText("path.txt"));
Console.WriteLine("Current Status of Flag1: "+c1.flag);
Console.WriteLine("Current Status of Flag2: " + c1.flag2);
}
这应该可以解决您的问题
推荐阅读
- javascript - 通过javascript提交表单后在视图中添加ModelState.AddModelError
- java - 在 java 中使用 Socket 上传文件
- java - 在不使用反射的情况下搜索 NLS 消息包类?
- node.js - NodeJS Express - 下载静态文件时挂起需要一分钟以上
- python - Seaborn Jointplot 为每个类添加颜色
- stata - 更正约束 mlogit stata
- linux - `|` 和 `mknod pipe p` 做同样的事情吗?
- html - 修改离子选择上的最后一项
- linux - ubuntu16.04上的“无法打开此设备:LIBUSB_ERROR_ACCESS”,已经尝试了一些解决方案
- swift - 适用于多种类型的协议扩展