C# 将包含System.Drawing.Image的对象序列化为json
我遇到了一点问题,似乎无法集中精力解决这个问题 我有一个接口(和实现的类),其中包含一个映像C# 将包含System.Drawing.Image的对象序列化为json,c#,json,serialization,.net-4.5,C#,Json,Serialization,.net 4.5,我遇到了一点问题,似乎无法集中精力解决这个问题 我有一个接口(和实现的类),其中包含一个映像 Guid uid { get; set; } Image imageData1 { get; set; } string fileName { get; set; } 图像以字节[]的形式存储在数据库中,将其取出不是问题,因为我将其反序列化为动态对象,然后使用我编写的转换函数将字节[]转换为图像来填充所需的对象 问题是另一个方向 string tmpJson = JsonCon
Guid uid { get; set; }
Image imageData1 { get; set; }
string fileName { get; set; }
图像以字节[]的形式存储在数据库中,将其取出不是问题,因为我将其反序列化为动态对象,然后使用我编写的转换函数将字节[]转换为图像来填充所需的对象
问题是另一个方向
string tmpJson = JsonConvert.SerializeObject( IclassOjbect );
此函数用于序列化映像的类名。但不是将图像数据作为字节数组
我可以获取图像数据并将其转换为序列化之外的字节[],但不知道如何在不进行任何危险的字符串操作的情况下将其插入tmpJSON中以代替“图像类名”
有人对此有什么想法吗?刚刚在谷歌上找到了这个,所以我想我可能会添加一个答案,即使在这么长时间之后:
[JsonIgnore]
public Image Image { get; set; } = null;
public byte[] ImageAsByte
{
get
{
if (this.Image != null)
{
using (var ms = new MemoryStream())
{
this.Image.Save(ms, this.Image.RawFormat);
return ms.ToArray();
}
}
return null;
}
set
{
if (value != null)
{
using (var ms = new MemoryStream(value))
{
this.Image = Image.FromStream(ms);
}
}
}
}
你能在你的对象中再添加一个byte[]字段并从序列化中排除([JsonIgnore])图像吗?这是一个选项,但不是一个诱人的选项,一旦序列化,我使用EF保存到数据库中,这种更改将显著下降。然后,我认为定制JsonConverter是一个不错的选择。范例-