Поделиться через


Сериализация диаграммы

Сериализация — это процесс преобразования диаграмм в формат, удобный для сохранения и передачи.Сериализация обычно используется для сохранения свойств диаграммы, но с ее помощью также можно получать данные и загружать их в существующий элемент управления диаграммы.

Во время сериализации данных диаграммы сериализуются только свойства со значениями, отличными от значений по умолчанию.

Формат сериализованных данных

Данные можно сериализовать в XML-файл или двоичный файл.Если данные сохраняются или загружаются с помощью объекта, производного от StringReader, StringWriter, XMLReader или XMLWriter, то в качестве формата данных необходимо использовать XML.

По умолчанию для данных используется формат XML.Чтобы сохранять и загружать данные в двоичном формате, установите свойство Format в значение SerializationFormat.Binary.

Сохранение и загрузка данных

Для сохранения свойств диаграммы используйте метод Save в объекте Chart.Serializer.Чтобы загрузить сериализованные данные в элемент управления диаграммы, используйте метод 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, также можно использовать методы Load и Save объекта Serializer для сохранения и загрузки определяемого пользователем состояния просмотра.Для считывания данных в элемент управления необходимо использовать объект 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.

Чтобы указать, для каких свойств не нужно выполнять сериализацию, используйте свойство NonSerializableContent так же, как свойство SerializableContent.

Иногда свойство можно одновременно указать как подлежащее и не подлежащее сериализации.В этом случае процесс сериализации разрешает противоречие следующим образом.

  • Именованные свойства имеют больший приоритет, чем шаблоны свойств.Например, если свойство SerializableContent имеет значение «*.BackColor», а свойство NonSerializableContent имеет значение «ChartArea.BackColor», то сериализованы будут все свойства BackColor, кроме объектов ChartArea.

  • В прочих случаях свойство 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 сбрасывает все свойства, которые не были сохранены в ходе сериализации, в значения по умолчанию. Это распространяется и на сериализуемые свойства, которые не прошли сериализацию.Это может привести к потере данных, если использовать метод Load сразу после вызова метода Save.Чтобы отключить сброс значений, установите свойство ResetWhenLoading в значение False, чтобы метод Load не сбрасывал свойства, имеющие значения, отличные от значений по умолчанию.

Важно!

При повторной загрузке свойств коллекции нужно соблюдать осторожность.Если в коллекции Chart.Series или Chart.ChartAreas присутствуют сохраняемые элементы, то в случае сохранения и немедленной повторной загрузки диаграммы при условии, что свойство ResetWhenLoading имеет значение True, с диаграммы будут удалены все ряды или элементы области диаграммы.

См. также

Ссылки

System.Windows.Forms.DataVisualization.Charting

System.Web.UI.DataVisualization.Charting

Другие ресурсы

Использование элементов диаграммы