提问人:TheMostEpic 提问时间:12/31/2019 最后编辑:Selim YildizTheMostEpic 更新时间:12/31/2019 访问量:422
使用 JSON 序列化 PictureBox
Serializing a PictureBox with JSON
问:
我正在处理一个 C# Windows 窗体应用项目,我需要使用 JSON 序列化 PictureBox 并将其保存到文件中。出于某种原因,JSON在尝试序列化PictureBox时给了我一个错误:
“Newtonsoft.Json.JsonSerializationException:'检测到类型为'System.Windows.Forms.PictureBox'的属性'Owner'的自引用循环。路径:'AccessibilityObject'。
我尝试创建一个新项目并在 PictureBox 上使用序列化,它工作正常。什么可能在我正在处理的当前项目上出现错误?
string dataToSave = JsonConvert.SerializeObject(bagPicture1);
答:
1赞
Charles
12/31/2019
#1
您可以像这样序列化 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));
评论
1赞
Jimi
12/31/2019
这可以工作(IMO,您应该提到然后将图像反序列化为字节数组,以使答案更有用),但不要使用 ,use(或什么都不使用):Jpeg 是一种有损压缩,反序列化时图像不会相同(即使不会立即引起注意,如果图像不代表均匀颜色的区域)。PNG 将更好地保留颜色信息(在某些特定情况下,您还可以避免例外情况)。ImageFormat.Jpeg
ImageFormat.Png
评论
JsonConvert.SerializeObject(bagPicture1, new JsonSerializerSetting(){ ReferenceLoopHandling = ReferenceLoopHandling.Ignore })
Custom cursors cannot be converted to string
Image