正在序列化包含BitmapImage的对象

本文关键字:对象 BitmapImage 包含 序列化 | 更新日期: 2023-09-27 18:29:04

这是关于这个主题的另一个问题:如何使用反序列化对象?我的类中的一些变量有问题,现在我只是把[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,这样我就可以将这些信息传递到我的下一个视图。

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

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

谢谢!

正在序列化包含BitmapImage的对象

这帮助我做了同样的事情。只需先转换为字节数组。

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; }
}

或者,您可以在JSON负载中包含imageUri,如下所示:

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

您可以将位图图像转换为这样的字节数组;

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

最好停止序列化实现(如BitmapImageSolidColorBrush等),开始序列化data。例如,如果您想传输jpg、gif等图像:byte[]的效果非常好,大多数序列化程序都能理解。如果你想序列化一种颜色,那么你有各种选择:

  • 枚举
  • RGBA值(可以是intstring

等等。这在几乎任何序列化程序和平台上都能很好地工作。然后,您只需以与目标平台相关的方式处理这些数据。

"我找到了一种方法(将C#/.NET中的位图序列化为XML),但这不适用于Windows 8应用程序。System.Drawing.Bitmap在Windows 8中不可用。"

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