3

这是关于这个主题的另一个问题:如何使用反序列化对象?我的类中有一些变量有问题,现在我只是把[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 中不可用。

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

谢谢!

4

3 回答 3

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

或者您可以在 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();
    }
}
于 2014-02-26T22:52:39.327 回答
0

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

  • 一个枚举
  • 一个 RGBA 值(可以是 anint或 a string

等等。这几乎可以在任何序列化程序和平台上正常工作。然后,您只需以针对您的目标平台的相关方式处理该数据。

于 2013-08-27T07:41:30.660 回答
0

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

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

于 2013-08-27T08:00:50.103 回答