次の方法で共有


グラフのシリアル化

シリアル化は、保存または送信できる形式にグラフを変換するプロセスです。 一般的に、シリアル化はグラフ プロパティを保存するときに使用しますが、データを取得し、既存のグラフ コントロールに読み込むときにも使用できます。

グラフ データをシリアル化すると、既定値以外の値を持つプロパティのみがシリアル化されます。

シリアル化されたデータ形式

データは XML ファイルまたはバイナリ ファイルにシリアル化できます。 StringReaderStringWriterXMLReader、または 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 を使用し、シリアル化可能なデータを ViewStateData プロパティに書き込むには StringWriter を使用する必要があります。

次のコードは、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);

シリアル化するグラフ プロパティの指定

シリアル化するプロパティを指定するには、Content プロパティ、SerializableContent プロパティ、またはその両方を Chart.Serializer に使用します。

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 メソッドを使用すると、データを損失する可能性があります。 このような動作を変えるには、Load メソッドによって既定値以外の値を持つプロパティを変更しないように、ResetWhenLoading プロパティを False に設定します。

重要

コレクション プロパティを再読み込みする場合は注意が必要です。Chart.Series または Chart.ChartAreas の特定の項目が永続化されている場合、True に設定された ResetWhenLoading を含むグラフを保存して直後に再読み込みすると、すべての系列またはグラフ領域のアイテムがグラフから削除されます。

参照

関連項目

System.Windows.Forms.DataVisualization.Charting

System.Web.UI.DataVisualization.Charting

その他の技術情報

グラフ コントロールの使用