这是关于这个主题的另一个问题: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中不可用。
有人可以帮我解决这个问题吗?
谢谢!
答案 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)
最好的办法是停止序列化实施(例如BitmapImage
,SolidColorBrush
等),开始序列化数据。例如,如果要传输jpg,gif等图像:byte[]
的效果非常好,大多数序列化程序都会理解。如果要序列化颜色 - 那么您有多种选择:
int
或string
)等。这几乎可以在任何串行器和平台上正常工作。然后,您只需以相关的方式为目标平台处理该数据。
答案 2 :(得分:0)
“我找到了一种方法(将C#/ .NET中的位图序列化为XML),但这对Windows 8应用程序不起作用.Windows 8中没有System.Drawing.Bitmap。 “
您可以使用BitmapImage.StreamSource将其保存/ CopyTo到MemoryStream并将其转换为bytearray