2013-01-15 51 views
0

可能重複:
Serialize a Bitmap in C#/.NET to XML位圖XML序列化

我試圖通過使用XmlSerializer的序列化MyClass的,不過貌似[XmlInclude(typeof運算(位圖))]不作品。

using System; 
using System.Drawing; 
using System.IO; 
using System.Xml.Serialization; 

class Program { 
    static void Main() { 
     var myClass = new MyClass { 
      Name = "foo", 
      MyImage = new Bitmap(@"e:\pumpkin.jpg") 
     }; 

     var serializer = new XmlSerializer(typeof(MyClass)); 
     var fileStream = File.OpenWrite(@"e:\test.xml"); 
     serializer.Serialize(fileStream, myClass); 
    } 
} 

[Serializable] 
[XmlInclude(typeof(Bitmap))] 
public class MyClass { 
    public string Name { get; set; } 
    public Bitmap MyImage { get; set; } 
} 

這是生成的文件:

<?xml version="1.0"?> 
<MyClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <Name>foo</Name> 
    <MyImage> 
    <Palette /> 
    </MyImage> 
</MyClass> 
+0

你的問題在這裏回答 - http://stackoverflow.com/questions/1907077/serialize-a-bitmap-in-c-net-to-xml;默認序列化不起作用的原因是因爲Bitmap沒有默認的無參數構造函數。 – dash

回答

1

你可以做的是獲取屬性/設置你的位圖作爲一個字節數組。這應該是基於64編碼的串行器。

public byte[] MyImageBytes { 
    get { 
     ImageConverter converter = new ImageConverter(); 
     return (byte[])converter.ConvertTo(MyImage, typeof(byte[])); 
    } 
} 

您可能還想用[XmlIgnore]屬性隱藏您的Bitmap屬性。您可能還希望LinqToXml更適合序列化程序,因爲它可以提供更多控制權。

請注意,XmlSerializer在base-64編碼時執行得相當糟糕。 LinqToXml的情況也是如此,BitConverter類雖然可以很好地轉換爲base-64。