圖表序列化
序列化是將圖表轉換成可儲存或傳輸之形式的程序。序列化通常用來儲存圖表屬性,但是也可用來擷取資料並將其載入至現有的圖表控制項。
在序列化圖表資料時,圖表只序列化具有非預設值的屬性。
序列化的資料格式
您可以將資料序列化至 XML 或二進位檔案。在使用衍生自 StringReader、StringWriter、XMLReader 或 XMLWriter 的物件儲存或載入資料時,必須使用 XML 做為資料格式。
預設的資料格式為 XML。若要以二進位格式儲存及載入資料,請將 Format 屬性設為 SerializationFormat.Binary。
儲存及載入資料
若要儲存圖表屬性,請使用 Chart.Serializer 物件中的 Save 方法。若要將序列化資料載入至圖表控制項,請使用 Load 方法。
根據預設,Chart.Serializer 物件會儲存及載入圖表的所有屬性。Save 和 Load 方法都經過多載,可搭配一些不同的物件使用。
下列程式碼示範如何設定儲存或載入圖表的資料。
' Save to and load from an XML file
Chart1.Serializer.Save("SavedData.xml")
Chart1.Serializer.Load("SavedData.xml")
' Save to and load from a .NET Stream object.
Dim myStream As New System.IO.MemoryStream()
Chart1.Serializer.Save(myStream)
Chart1.Serializer.Load(myStream)
//Save to and load from an XML file
Chart1.Serializer.Save("SavedData.xml");
Chart1.Serializer.Load("SavedData.xml");
// Save to and load from a .NET Stream object.
System.IO.MemoryStream myStream = new System.IO.MemoryStream();
Chart1.Serializer.Save(myStream);
Chart1.Serializer.Load(myStream);
下列程式碼示範如何使用衍生自 XMLReader 和 XMLWriter 的物件來載入及儲存圖表資料。
Dim myWriter As New System.XML.XmlTextWriter("c:\MyPersistedData.xml", System.Text.Encoding.ASCII)
Chart1.Serializer.Save(myWriter)
' We initialize the XML reader with data from a file.
Dim myXMLReader As New System.XML.XmlTextReader("c:\MyPersistedData.xml")
Chart1.Serializer.Load(myXMLReader)
System.XML.XmlTextWriter myWriter = new System.XML.XmlTextWriter("c:\\MyPersistedData.xml", System.Text.Encoding.ASCII);
Chart1.Serializer.Save(myWriter);
// We initialize the XML reader with data from a file.
System.XML.XmlTextReader myXMLReader = new System.XML.XmlTextReader("c:\\MyPersistedData.xml");
Chart1.Serializer.Load(myXMLReader);
序列化狀態資料 (ASP.NET)
如果使用 ViewStateData 屬性進行狀態管理,同時也可以使用 Serializer 物件的 Load 和 Save 方法,來儲存及載入使用者定義的檢視狀態。您必須使用 StringReader 將資料讀入控制項,以及使用 StringWriter 將可序列的資料寫入至 ViewStateData 屬性。
下列程式碼示範如何使用 StringReader 和 StringWriter 來儲存及載入序列化資料。
Dim sw As New System.IO.StringWriter
Chart1.Serializer.Save(sw)
' Initialize the string reader with the data being posted by the client back to the server.
Dim sr As New StringReader(Chart1.ViewStateData)
Chart1.Serializer.Load(sr)
System.IO.StringWriter sw = new System.IO.StringWriter();
Chart1.Serializer.Save(sw);
// Initialize the string reader with the data being posted by the client back to the server.
StringReader sr = new StringReader(Chart1.ViewStateData);
Chart1.Serializer.Load(sr);
指定要序列化的圖表屬性
若要指定要序列化的屬性,請使用 Chart.Serializer 中的 Content 或 SerializableContent 屬性 (或兩者)。
Content 屬性指定要序列化之圖表屬性的分類,而 SerializableContent 屬性則是所有要序列化之圖表屬性的逗號分隔清單。這些屬性適用於所有載入、儲存及重設作業。
重要
Content 屬性會透過插入屬性萬用字元,在內部使用 SerializableContent。如果您希望一起使用這兩個屬性,請確定將 SerializableContent 字串與其自身串連,以保留 Content 屬性中的設定。
若要指定不序列化的屬性,請以使用 SerializableContent 屬性的相同方式來使用 NonSerializableContent 屬性。
有時屬性可以同時設為序列化和不序列化。在此情況下,序列化程序會依照下列方式解決不一致:
具名屬性的優先順序高於屬性萬用字元。例如,如果 SerializableContent 設為 "*.BackColor" 而 NonSerializableContent 設為 "ChartArea.BackColor",則會序列化 ChartArea 物件以外的所有 BackColor 屬性。
否則 SerializableContent 的優先順序高於 NonSerializableContent。
下列程式碼示範如何將圖表的外觀資料和軸標籤序列化至磁碟,然後載入該序列化資料。
' Save chart appearance properties that have non-default values, as well as axis labels.
Chart1.Serializer.Content = SerializationContent.Appearance
' Concatenate the Content property string and the SerializableContent string
Chart1.Serializer.SerializableContent += ",DataPoint.AxisLabel,Series.AxisLabels,Series.Name,ChartArea.Name"
' Exclude all chart BackColor properties
Chart1.Serializer.NonSerializableContent = *.BackColor"
' Save the chart data
Chart1.Serializer.Save("AppearanceProps.xml")
' Load the serialized data.
Chart1.Serializer.Content = SerializationContent.Appearance
Chart1.Serializer.SerializableContent += ",DataPoint.AxisLabel,Series.AxisLabels,Series.Name,ChartArea.Name"
Chart1.Serializer.Load("AppearanceProps.xml")
// Save chart appearance properties that have non-default values, as well as axis labels.
Chart1.Serializer.Content = SerializationContent.Appearance;
// Concatenate the Content property string and the SerializableContent string
Chart1.Serializer.SerializableContent += ",DataPoint.AxisLabel,Series.AxisLabels,Series.Name,ChartArea.Name";
// Exclude all chart BackColor properties
Chart1.Serializer.NonSerializableContent = *.BackColor";
// Save the chart data
Chart1.Serializer.Save("AppearanceProps.xml");
// Load the serialized data.
Chart1.Serializer.Content = SerializationContent.Appearance;
Chart1.Serializer.SerializableContent += ",DataPoint.AxisLabel,Series.AxisLabels,Series.Name,ChartArea.Name";
Chart1.Serializer.Load("AppearanceProps.xml");
將圖表屬性重設為預設值
若要在任何時候重設圖表的所有屬性,請使用 Reset 方法。
根據預設,序列化 Load 方法會將所有未序列化的屬性重設為其預設值,包括未序列化的可序列化屬性。如果您使用 Save 方法,並立即使用 Load 方法,這可能導致資料遺失。若要變更這種行為,請將 ResetWhenLoading 屬性設為 False,讓 Load 方法不會重設任何具有非預設值的屬性。
重要
在重新載入集合屬性時,請務必小心。如果 Chart.Series 或 Chart.ChartAreas 中的特定項目已保存,那麼儲存並立即以 ResetWhenLoading 設為 True 來重新載入圖表,會使得所有數列或圖表區域項目從圖表中刪除。
請參閱
參考
System.Windows.Forms.DataVisualization.Charting
System.Web.UI.DataVisualization.Charting