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.BitmapWindows 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

あなたの最善の策は、実装のシリアル化を停止し(など) BitmapImageデータSolidColorBrushのシリアル化を開始することです。たとえば、jpg、gif などの画像を転送する場合: aは非常にうまく機能し、ほとんどのシリアライザーによって理解されます。色をシリアル化する場合は、さまざまなオプションがあります。byte[]

  • 列挙型
  • RGBA 値 (intまたはstring)

など。これは、実質的にすべてのシリアライザーとプラットフォームで正常に機能します。次に、ターゲット プラットフォームに適した方法でそのデータを処理するだけです。

于 2013-08-27T07:41:30.660 に答える
0

「これを行う方法 (C#/.NET でビットマップを XML にシリアル化する) を見つけましたが、これは Windows 8 アプリでは機能しません。System.Drawing.Bitmap は Windows 8 では使用できません。」

BitmapImage.StreamSource を使用して、MemoryStream に保存/CopyToし、bytearray に変換できます。

于 2013-08-27T08:00:50.103 に答える