序列化包含BitmapImage的Object

时间:2013-08-27 07:35:46

标签: c# serialization windows-8 bitmap xml-serialization

这是关于这个主题的另一个问题:How to use deserialized object?我的班级中有一些变量存在问题,现在我只是把[XmlIgnore]放在无法序列化的变量前面,所以串行化该课程目前有效。

我的班级看起来像这样:

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应用程序不起作用。 {8}在Windows 8中不可用。

有人可以帮我解决这个问题吗?

谢谢!

3 个答案:

答案 0 :(得分: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 :(得分:0)

最好的办法是停止序列化实施(例如BitmapImageSolidColorBrush等),开始序列化数据。例如,如果要传输jpg,gif等图像:byte[]的效果非常好,大多数序列化程序都会理解。如果要序列化颜色 - 那么您有多种选择:

  • 一个枚举
  • RGBA值(可以是intstring

等。这几乎可以在任何串行器和平台上正常工作。然后,您只需以相关的方式为目标平台处理该数据。

答案 2 :(得分:0)

“我找到了一种方法(将C#/ .NET中的位图序列化为XML),但这对Windows 8应用程序不起作用.Windows 8中没有System.Drawing.Bitmap。 “

您可以使用BitmapImage.StreamSource将其保存/ CopyTo到MemoryStream并将其转换为bytearray