'System.IO.Compression.GZipStream'无法序列化。请考虑使用DataContractAttribute属性对其进行标记

时间:2011-09-06 08:54:01

标签: wcf gzip datacontractserializer gzipstream

我正在尝试使用WCF服务上传GZip文件。我试图使用Gzip压缩文件,然后将其传递给WCF服务以上传到服务器。 每次我运行代码时都会收到此错误消息

  

'System.IO.Compression.GZipStream'无法序列化。考虑   使用DataContractAttribute属性标记它,并标记所有   要使用DataMemberAttribute序列化的成员数   属性。

我已将此属性成员标记为[DataMember]。我还完成了[DataContract]及以下添加了[Serialiable],这不是诚实的。

任何人都可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

我不太确定这是一种正确的方式,但它对我有用。

1)创建数据传输对象类

[DataContract]
class ZippedDataDTO
{
    [DataMember]
    public byte[] RawData {get;set;}

    //other relevant metadata
}

2)压缩数据后,从流中获取字节,如.ToArray()

3)将压缩的原始字节分配给DTO的RawBytes

4)将此DTO作为WCF服务合同的一部分返回

[ServiceContract]
interface IService
{
    [OperationContract]
    ZippedDataDTO GetZippedData();  
    ...
}