Сериализация изображений WCF - PullRequest
5 голосов
/ 26 января 2012

У меня есть этот код в моей службе 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 'с именем контракта данных' Битовая карта: http://schemas.datacontract.org/2004/07/System.Drawing' не ожидается. Рекомендуется использовать DataContractResolver или добавлять любые типыстатически известны списку известных типов - например, с помощью атрибута KnownTypeAttribute или путем добавления их в список известных типов, передаваемых в DataContractSerializer. '

Мой код находится в C #, Framework 4.0,сборка в Visual Studio 2010 Pro.

Пожалуйста, помогите, заранее спасибо.

Ответы [ 2 ]

15 голосов
/ 26 января 2012

Контракт с данными ожидался 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();
}
1 голос
/ 26 января 2012

Как вы можете прочитать здесь: Нужно сериализовать растровое изображение silverlight Изображение не сериализуемо.Таким образом, вы могли бы превратить изображение в байтовый массив (любого формата, который вам нравится, начиная от цветов пикселей до официального формата, такого как PNG) и использовать этот

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...