C# 使用JSON序列化和反序列化类构造函数值
编辑: 我最终设法写入文件并解决了错误,但它不会更新bools,我的意思是我在程序运行时更改了标志值,但它不会更改值 Main类看不到标志的更改。 我想保存并重新加载布尔变量类,我尝试使用JSON将变量写入和读取到txt文件。但是,代码既不创建txt文件,也不写入其中 (我有一个更改标志值的按钮) 我很困惑,不知道该怎么办。你能帮帮我吗C# 使用JSON序列化和反序列化类构造函数值,c#,json,serialization,deserialization,C#,Json,Serialization,Deserialization,编辑: 我最终设法写入文件并解决了错误,但它不会更新bools,我的意思是我在程序运行时更改了标志值,但它不会更改值 Main类看不到标志的更改。 我想保存并重新加载布尔变量类,我尝试使用JSON将变量写入和读取到txt文件。但是,代码既不创建txt文件,也不写入其中 (我有一个更改标志值的按钮) 我很困惑,不知道该怎么办。你能帮帮我吗 using Newtonsoft.Json; using System.Web.Script.Serialization; 编辑的代码 [可序列化] [Jso
using Newtonsoft.Json; using System.Web.Script.Serialization;
编辑的代码
[可序列化]
[JsonObject(MemberSerialization.OptIn)]
一班
{
公共布尔旗;
公共布尔标志2;
公共类别1()
{
flag=false;
flag2=假;
}
}
[可序列化]
公共部分类Form1:Form
{
公共表格1()
{
初始化组件();
}
Class1 c1=新的Class1();
私有无效按钮1\u单击(对象发送者,事件参数e)
{
c1.flag=true;
c1.2=真;
Console.WriteLine(“标志更改:+c1.Flag”);
Console.WriteLine(“Flag2已更改:+c1.Flag2”);
}
[状态线程]
静态void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(新Form1());
Class1 c1=新的Class1();
字符串json=JsonConvert.SerializeObject(c1);
Console.WriteLine(json);
writealText(“path.txt”,json);
字符串json2=File.ReadAllText(“path.txt”);
Form1F2=JsonConvert.DeserializeObject(json2);
控制台写入线(json2);
您的代码尝试序列化大量信息(它尝试序列化表单
类的成员)。您应该调用JsonConvert.SerializedObject(f)
,并使用它,以便轻松控制序列化的成员。为什么不使用JsonConvert.SerializedObject()
?您正在使用DeserializeObjectit,先序列化,然后反序列化,这样它就可以读取和写入文件—这不是问题的解决方案,而是一些值得注意的事情:Application.Run(new Form1())中的Form1
;
与Form1 f=new Form1();
(假设你买了两辆丰田花冠-100%相同的车。它们仍然是不同的车。如果你撞坏了一辆,另一辆仍然可以-好吧,除非你撞到另一辆,但这与类比无关)。此外Application.Run(…)
将一直阻止,直到第一个表单1
关闭。至于您的问题,我可能建议不要序列化表单本身,而是使用一个您序列化的数据对象。但是它运行GUI,我无法更改它,您有何建议?@BB我的意思是为什么要使用新JavaScriptSerializer()。序列化(f);
overJsonConvert.SerializeObject(f)
。我不知道它是否有什么不同,但是在序列化和反序列化时使用同一个类可能是个好主意。我在编辑的代码中使用了该方法,但是它没有更新txt文件中的值,我认为这是一个通信问题。它应该将标志的新值正确地写入txt ID y您还可以使用opt-in序列化,并使用[JsonProperty]属性标记要序列化的成员?