C# 使用JSON序列化PictureBox

C# 使用JSON序列化PictureBox,c#,winforms,picturebox,C#,Winforms,Picturebox,我正在做一个C Windows窗体应用程序项目,我需要用JSON序列化PictureBox并将其保存到一个文件中。出于某种原因,JSON在尝试序列化PictureBox时给了我一个错误: Newtonsoft.Json.JsonSerializationException:'检测到类型为'System.Windows.Forms.PictureBox'的属性'Owner'的自引用循环。路径“AccessibilityObject.” 我尝试创建一个新项目,并在PictureBox上使用序列化,效

我正在做一个C Windows窗体应用程序项目,我需要用JSON序列化PictureBox并将其保存到一个文件中。出于某种原因,JSON在尝试序列化PictureBox时给了我一个错误:

Newtonsoft.Json.JsonSerializationException:'检测到类型为'System.Windows.Forms.PictureBox'的属性'Owner'的自引用循环。路径“AccessibilityObject.”

我尝试创建一个新项目,并在PictureBox上使用序列化,效果很好。在我正在进行的当前项目中,什么可能会导致错误

string dataToSave = JsonConvert.SerializeObject(bagPicture1);

可以按如下方式序列化img:

var img = this.pictureBox1.Image;
var ms = new MemoryStream();

// any ImageFormat you like, ImageFormat.Bmp for uncompressed
img.Save(ms, ImageFormat.Jpeg); 

var serialized = JsonConvert.SerializeObject(ms.ToArray());
恢复img:

var myBytes = JsonConvert.DeserializeObject<byte[]>(serialized);
var img = Bitmap.FromStream(new MemoryStream(myBytes));

您是否忽略了引用循环处理?JsonConvert.SerializeObjectbagPicture1,新JsonSerializerSetting{ReferenceLoopHandling=ReferenceLoopHandling.Ignore}@Cotur我仍然收到一个错误,它无法序列化光标。自定义游标无法转换为字符串。pictureBox的SerializeObject可能仅在设计时模式下可用?不要序列化windows控件,只序列化控件的内容(在本例中为图像)。您是否还需要保留其他属性,如大小/位置等?在我看来,这是可行的,您应该提到,然后将图像反序列化为字节数组,以使答案更有用,但不要使用ImageFormat.Jpeg,使用ImageFormat.Png或其他任何内容:Jpeg是一种有损压缩,如果图像不代表颜色一致的区域,反序列化时图像将不相同,即使不立即可见。PNG将更好地保存颜色信息,在某些特定情况下,您还可以避免异常。