'System.IO.Compression.GZipStream' не может быть сериализован.Попробуйте пометить его атрибутом DataContractAttribute - PullRequest
3 голосов
/ 06 сентября 2011

Я пытаюсь использовать сервис WCF для загрузки файлов GZip.Я пытаюсь сжать файлы с помощью Gzip, а затем передать его в службу WCF для загрузки на сервер.Каждый раз, когда я запускаю код, я получаю это сообщение об ошибке

'System.IO.Compression.GZipStream' не может быть сериализовано.Попробуйте пометить его атрибутом DataContractAttribute и пометить все его элементы, которые вы хотите сериализовать, атрибутом DataMemberAttribute.

Я пометил этот элемент свойства как [DataMember].Я также сделал [DataContract] и ниже добавили [Serialiable], который не нужен, чтобы быть честным.

Может ли кто-нибудь помочь?

1 Ответ

0 голосов
/ 06 сентября 2011

Я не слишком уверен, что это правильный путь, но у меня это сработало.

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();  
    ...
}
...