Share via


Serialización de gráficos (Controles Chart)

La serialización es el proceso de conversión de gráficos en un formato que se pueda guardar o transmitir. Normalmente se usa para guardar propiedades de gráfico, pero también se puede utilizar para recuperar datos y cargarlos en un control de gráfico existente.

Al serializar datos de gráficos, el gráfico serializa únicamente las propiedades con valores no predeterminados.

Formato de datos serializados

Puede serializar los datos en un archivo XML o binario. Cuando se guardan o cargan datos mediante un objeto derivado de StringReader, StringWriter, XMLReadero XMLWriter, debe usar XML como formato de datos.

El formato predeterminado para los datos es XML. Para guardar y cargar datos en formato binario, establezca la propiedad Format en SerializationFormat.Binary.

Guardar y cargar datos

Para guardar las propiedades de gráfico, use el método Save en el objeto Chart.Serializer. Para cargar datos serializados en el control de gráfico, use el método Load.

De forma predeterminada, el objeto Chart.Serializer guarda y carga todas las propiedades del gráfico que están guardadas y cargadas. Los métodos Save y Load se sobrecargan para poder utilizarlos con diversos objetos.

El siguiente código muestra cómo guardar o cargar datos de un gráfico.

' 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);

El siguiente código muestra cómo utilizar objetos derivados de XMLReader y XMLWriter para cargar y guardar datos del gráfico.

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);

Serializar datos de estado (ASP.NET)

Si usa la propiedad ViewStateData para la administración de estado, también puede utilizar los métodos Load y Save del objeto Serializer para guardar y cargar un estado de vista definido por el usuario. Debe usar StringReader para leer los datos en el control y StringWriter para escribir los datos serializados en la propiedad ViewStateData.

En el ejemplo de código siguiente se muestra cómo usar StringReader y StringWriter para guardar y cargar datos serializados.

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);

Especificar propiedades de gráfico para serializar

Para especificar qué propiedades se van a serializar, utilice las propiedades Content o SerializableContent, o ambas, en Chart.Serializer.

La propiedad Content especifica la categoría de propiedades de gráfico que se va a serializar, mientras la propiedad SerializableContent es una lista separada por comas de todas las propiedades de gráfico que se van a serializar. Estas propiedades se aplican a todas las operaciones de carga, guardado y restablecimiento.

Nota importanteImportante

La propiedad Content utiliza SerializableContent internamente insertando caracteres comodín de propiedad. Si desea utilizar las dos propiedades juntas, asegúrese de que la cadena SerializableContent se concatena consigo misma para conservar la configuración de la propiedad Content.

Para especificar qué propiedades no se van a serializar, utilice la propiedad NonSerializableContent de la misma manera que la propiedad SerializableContent.

A veces, una propiedad se puede establecer para estar serializada y para no estarlo. En este caso, el proceso de serialización resuelve las incoherencias del modo siguiente:

  • Las propiedades con nombre tienen prioridad sobre los caracteres comodín de propiedad. Por ejemplo, si SerializableContent está establecido en"*.BackColor" y NonSerializableContent está establecido en "ChartArea.BackColor", se serializarán todas las propiedades BackColor, excepto los objetos ChartArea.

  • En caso contrario, SerializableContent tiene prioridad sobre NonSerializableContent.

El siguiente código muestra cómo serializar los datos de apariencia del gráfico y las etiquetas de eje en el disco para, a continuación, cargar estos datos serializados.

' 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");

Restablecer propiedades de gráfico a los valores predeterminados

Para restablecer todas las propiedades de un gráfico en cualquier momento, utilice el método Reset.

De forma predeterminada, el método de serialización Load restablece todas las propiedades no serializadas y las guarda en sus valores predeterminados, incluso las propiedades serializables que no están serializadas. Si se usa el método Save e inmediatamente después se utiliza el método Load se puede producir una pérdida de datos. Para modificar este comportamiento, establezca la propiedad ResetWhenLoading en False para que el método Load no modifique los valores no predeterminados de ninguna propiedad.

Nota importanteImportante

Se debe tener cuidado al recargar las propiedades de la colección. Si se conservan los elementos específicos en Chart.Series o Chart.ChartAreas, al guardar y recargar inmediatamente el gráfico con ResetWhenLoading establecido en True se eliminan del gráfico todas las series y elementos de área de gráfico.

Vea también

Referencia

System.Windows.Forms.DataVisualization.Charting

System.Web.UI.DataVisualization.Charting

Otros recursos

Utilizar controles Chart