2013-08-27 2 views
3

Это еще один вопрос по этой теме: How to use deserialized object? У меня проблема с некоторыми переменными в моем классе, прямо сейчас я просто положил [XmlIgnore] infront переменных, которые не могут быть сериализованы, поэтому сериализация класса работает на данный момент.Серийный объект, содержащий BitmapImage

Моего класса выглядит следующим образом:

public class Channel : INotifyPropertyChanged 
{ 
    public int Width { get; set; } 
    public int Height { get; set; } 
    [XmlIgnore] 
    public BitmapImage Logo { get; set; } 
    public string CurrentCoverURL { get; set; } 
    [XmlIgnore] 
    public SolidColorBrush Background { get; set; } 
    private string name; 
    public string Name 
    { 
     get { return name; } 
     set 
     { 
      name = value; 
      NotifyPropertyChanged("Name"); 
     } 
    } 
} 

Теперь мне как-то нужно сериализовать BitmapImage и SolidColorBrush тоже, так что я могу передать эту информацию для моего следующего вида.

Я нашел способ сделать это (Serialize a Bitmap in C#/.NET to XML), но это не работает для приложений Windows 8. System.Drawing.Bitmap не доступен в Windows 8.

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

Спасибо!

ответ

0

Лучше всего, чтобы остановить сериализации реализации (например, BitmapImage, SolidColorBrush и т.д.), которые начинают сериализацию данных. Например, если вы хотите передать изображение, такое как jpg, gif и т. Д.: byte[] работает замечательно хорошо, и это будет понято большинством сериализаторов. Если вы хотите сериализовать цвет - то у вас есть различные варианты:

  • перечисление
  • значения RGBA (может быть int или string)

и т.д. Это будет прекрасно работать практически любой сериализатор и платформа. Затем вы просто обрабатываете эти данные соответствующим образом для своей целевой платформы.

0

«Я нашел способ сделать это (сериализовать растровое изображение в C# /. NET для XML), но это не работает для приложений Windows 8. System.Drawing.Bitmap недоступен в Windows 8."

Вы можете использовать BitmapImage.StreamSource для сохранения/CopyTo его в MemoryStream и преобразования его в ByteArray

3

Это помогло мне сделать то же самое. Сначала сначала преобразуйте в массив байтов.

http://jamessdixon.wordpress.com/2013/10/01/handling-images-in-webapi/

Вы можете включить изображение в вашем JSON полезной нагрузки, как это:

public class Person 
{ 
    public Int32 PersonId { get; set; } 
    public String FirstName { get; set; } 
    public byte[] Image { get; set; } 
} 

или вы можете включить imageUri в вашем JSON полезной нагрузки, как это:

public class Person 
{ 
    public Int32 PersonId { get; set; } 
    public String FirstName { get; set; } 
    public String ImageUri { get; set; } 
} 

И ты может преобразовать ваше bitmapimage в массив байтов, как это;

public static byte[] ConvertToBytes(BitmapImage bitmapImage) 
    { 
     using (var ms = new MemoryStream()) 
     { 
      var btmMap = new WriteableBitmap 
       (bitmapImage.PixelWidth, bitmapImage.PixelHeight); 

      // write an image into the stream 
      btmMap.SaveJpeg(ms, bitmapImage.PixelWidth, bitmapImage.PixelHeight, 0, 100); 

      return ms.ToArray(); 
     } 
    } 
+1

Ответы, которые состоят из немного больше, чем ссылки, обескуражены здесь. В долгосрочной перспективе ссылки меняются, а затем ваш ответ будет бесполезным. Пожалуйста, подумайте над тем, чтобы расширить свой ответ, включив некоторые конкретные примеры. – joran

Смежные вопросы