Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用JSON序列化和反序列化类构造函数值_C#_Json_Serialization_Deserialization - Fatal编程技术网

C# 使用JSON序列化和反序列化类构造函数值

C# 使用JSON序列化和反序列化类构造函数值,c#,json,serialization,deserialization,C#,Json,Serialization,Deserialization,编辑: 我最终设法写入文件并解决了错误,但它不会更新bools,我的意思是我在程序运行时更改了标志值,但它不会更改值 Main类看不到标志的更改。 我想保存并重新加载布尔变量类,我尝试使用JSON将变量写入和读取到txt文件。但是,代码既不创建txt文件,也不写入其中 (我有一个更改标志值的按钮) 我很困惑,不知道该怎么办。你能帮帮我吗 using Newtonsoft.Json; using System.Web.Script.Serialization; 编辑的代码 [可序列化] [Jso

编辑: 我最终设法写入文件并解决了错误,但它不会更新bools,我的意思是我在程序运行时更改了标志值,但它不会更改值

Main类看不到标志的更改。

我想保存并重新加载布尔变量类,我尝试使用JSON将变量写入和读取到txt文件。但是,代码既不创建txt文件,也不写入其中

(我有一个更改标志值的按钮)

我很困惑,不知道该怎么办。你能帮帮我吗

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);
over
JsonConvert.SerializeObject(f)
。我不知道它是否有什么不同,但是在序列化和反序列化时使用同一个类可能是个好主意。我在编辑的代码中使用了该方法,但是它没有更新txt文件中的值,我认为这是一个通信问题。它应该将标志的新值正确地写入txt ID y您还可以使用opt-in序列化,并使用[JsonProperty]属性标记要序列化的成员?