c# - 加载对象时的反序列化问题

标签 c# deserialization

我的目标是通过读取 txt 来设置 bool 值。

这是我的问题,很简单,一步一步来;

  1. 我通过单击设置按钮将值设置为“true”

  2. txt文件中JSON对象设置成功

  3. 关闭并重新运行程序

  4. 我希望当前的 bool 标志在上一次运行时为“真”

但是它们仍然是假的,我的“反序列化”有问题 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);
        }

最佳答案

如果您在应用程序启动时没有先单击 Button1 而单击 Button2,则默认情况下 c1 将为 false,因为 bool 值的默认值为 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);
    }

这应该可以解决您的问题

关于c# - 加载对象时的反序列化问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57096353/

相关文章:

c# - 使用 DI 在遗留代码中向 NHibernate Session 添加拦截器

java - 从 xstream 反序列化 xml 文件

serialization - 高性能实体序列化: BSON vs MessagePack (vs JSON)

c# - ListBox SelectionChanged SelectedItem 未在某些机器上更新

c# - 如何在 C# 中编码数据类型 unsigned char**?

c# - Google Calendar API 和 C# - 403 Forbidden

Java 序列化 : readFields() beyond of readObject()?

c# - 客户端Json反序列化类结构

java - 使用 Jackson 序列化两个具有相同 id 的不同 POJO 对象

c# - Range[] 而不是 get_Range()