Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WCF图像序列化_C#_Wcf_Image - Fatal编程技术网

C# WCF图像序列化

C# WCF图像序列化,c#,wcf,image,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 :

我的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()方法时会发生此错误:

尝试序列化参数时出错。InnerException消息为“Type”System.Drawing.Bitmap”,数据协定名称为“位图”:http://schemas.datacontract.org/2004/07/System.Drawing“不期望”。< /强>考虑使用DATACONTRORTCORDEVER或在已知类型的列表中添加静态不知道的任何类型。通过使用KnownTypeAttribute属性或将它们添加到传递给DataContractSerializer的已知类型列表中。”

我的代码是在Visual Studio 2010 Pro中构建的C#Framework 4.0中编写的


请帮助,提前感谢。

数据合同预期为
Image
,但它得到了一个
位图:Image
实例。WCF喜欢提前了解继承,所以您需要告诉它。但是老实说,我认为这不是一个好办法;实际上,您应该直接抛出原始二进制文件,这可能意味着首先将
图像
保存到
内存流
。你也应该正式装饰你的合同类型。我将发送:

[DataContract]
public class MyImage
{
    [DataMember]
    public byte[] Image { get; set; }
    [DataMember]
    public string FullPath { get; set; }
}
获取
字节[]
的示例:

using(var ms = new MemoryStream()) {
    image.Save(ms, ImageFormat.Bmp);
    return ms.ToArray();
}

正如您在这里看到的:图像是不可序列化的。因此,您可以将图像转换为字节数组(您喜欢的任何格式,从像素颜色到官方格式(如PNG))并使用该

System.Drawing.image具有SerializableAttribute,因此我认为它是可序列化的。请参见此处以获取参考:该属性不适用于xml序列化。WCF使用DataContractSerializer。它使用XML序列化。好的,我将把它转换成字节[]。谢谢。我使用Image.FromFile()方法获取图像,而不使用位图类。如何将图像转换为字节[]?