WCF图像序列化

Joh*_*ona 5 c# wcf image

我的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)
    {
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

但是当我运行SaveImage()方法时会发生此错误:

尝试序列化参数http://tempuri.org/:e时出错.InnerException消息是' Type'System.Drawing.Bitmap',数据协定名称为'Bitmap:http://schemas.datacontract.org/2004/07/System.Drawing'不是预期的.考虑使用DataContractResolver或添加静态已知的已知类型的列表中的任何类型的不-例如,通过使用KnownTypeAttribute属性或将它们添加到已知类型传递给DataContractSerializer的名单"

我的代码在C#,Framework 4.0中,在Visual Studio 2010 Pro中构建.

请提前帮助,谢谢.

Mar*_*ell 15

预计数据合同Image,但它有一个Bitmap : Image实例.WCF喜欢提前知道继承,所以你需要告诉它.但!老实说,我认为这不是一个好方法; 你应该真的只是抛弃原始二进制文件 - 这可能意味着将其保存ImageMemoryStream第一个.您还应该正式装饰您的合同类型.我会发送:

[DataContract]
public class MyImage
{
    [DataMember]
    public byte[] Image { get; set; }
    [DataMember]
    public string FullPath { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

得到的一个例子byte[]:

using(var ms = new MemoryStream()) {
    image.Save(ms, ImageFormat.Bmp);
    return ms.ToArray();
}
Run Code Online (Sandbox Code Playgroud)