다음을 통해 공유


차트 Serialization(차트 컨트롤)

직렬화는 차트를 저장 또는 전송 가능한 형식으로 변환하는 프로세스입니다. 직렬화는 일반적으로 차트 속성을 저장하는 데 사용되지만, 데이터를 검색하여 기존 차트 컨트롤로 로드하는 데에도 사용할 수 있습니다.

차트 데이터를 직렬화할 때 차트에서 기본값으로 지정되지 않은 속성만 직렬화됩니다.

직렬화된 데이터 형식

데이터를 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 개체의 LoadSave 메서드를 사용하여 사용자 정의 뷰 상태를 저장 및 로드할 수도 있습니다. StringReader를 사용하여 데이터를 컨트롤로 읽고 StringWriter를 사용하여 직렬화 가능한 데이터를 ViewStateData 속성에 써야 합니다.

다음 코드에서는 StringReaderStringWriter를 사용하여 직렬화된 데이터를 저장 및 로드하는 방법을 보여 줍니다.

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 속성에서 설정을 유지해야 합니다.

직렬화하지 않을 속성을 지정하려면 NonSerializableContent 속성을 SerializableContent 속성과 동일한 방법으로 사용합니다.

속성을 직렬화하도록 설정하는 동시에 직렬화하지 않도록 지정할 수 있는 경우도 있습니다. 이 경우 직렬화 프로세스에서 불일치가 다음과 같이 해결됩니다.

  • 명명된 속성이 속성 와일드카드보다 우선합니다. 예를 들어 SerializableContent를 "*.BackColor"로 설정하고 NonSerializableContent를 "ChartArea.BackColor"로 설정할 경우 ChartArea 개체를 제외한 모든 BackColor 속성이 직렬화됩니다.

  • 그렇지 않으면 SerializableContentNonSerializableContent보다 우선합니다.

다음 코드에서는 차트의 모양 데이터와 축 레이블을 디스크에 직렬화한 다음 직렬화된 데이터를 로드하는 방법을 보여 줍니다.

' 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

관련 자료

차트 컨트롤 사용