WCF映像序列化
本文关键字:序列化 映像 WCF | 更新日期: 2023-09-27 18:21:23
我的WCF服务中有以下代码:
public class MyImage
{
public Image Image { get; set; }
public string FullPath { get; set; }
}
[ServiceContract]
public interface IMyService
{
[OperationContract] void SaveImage(MyImage myImg);
}
public class MyService : IMyService
{
public void SaveImage(MyImage myImg)
{
// ...
}
}
但是当我运行SaveImage()方法时会出现这个错误:
尝试序列化参数时出错http://tempuri.org/:e.InnerException消息为"类型"System.Drawing.Bitmap",数据协定名称为"Bitmap":http://schemas.datacontract.org/2004/07/System.Drawing不应为"考虑使用DataContractResolver或将任何未知类型静态添加到已知类型列表中,例如,使用KnownTypeAttribute属性或将它们添加到传递给DataContractSerializer的已知类型列表。'
我的代码是C#,Framework 4.0,在Visual Studio 2010 Pro中构建的。
请帮忙,提前谢谢。
数据协定需要Image
,但它得到了一个Bitmap : Image
实例。WCF喜欢提前了解继承,所以你需要告诉它。但是!老实说,我认为这不是一个好办法;实际上,您应该只抛出原始二进制文件——这可能意味着首先将Image
保存为MemoryStream
。你还应该正式装饰你的合同类型。我会发送:
[DataContract]
public class MyImage
{
[DataMember]
public byte[] Image { get; set; }
[DataMember]
public string FullPath { get; set; }
}
获取byte[]
:的示例
using(var ms = new MemoryStream()) {
image.Save(ms, ImageFormat.Bmp);
return ms.ToArray();
}
正如您在这里所读到的:需要序列化位图图像silverlight图像是不可序列化的。因此,您可以将图像转换为字节数组(任何您喜欢的格式,从像素颜色到PNG等官方格式),并使用