Ler en inglés

Compartir por


XmlSerializer Clase

Definición

Serializa y deserializa objetos en y desde documentos XML. XmlSerializer permite controlar el modo en que se codifican los objetos en XML.

C#
public class XmlSerializer
Herencia
XmlSerializer

Ejemplos

El ejemplo siguiente contiene dos clases principales: PurchaseOrder y Test. La PurchaseOrder clase contiene información sobre una sola compra. La Test clase contiene los métodos que crean el pedido de compra y que leen el pedido de compra creado.

C#
using System;
using System.Xml;
using System.Xml.Serialization;
using System.IO;

/* The XmlRootAttribute allows you to set an alternate name
   (PurchaseOrder) of the XML element, the element namespace; by
   default, the XmlSerializer uses the class name. The attribute
   also allows you to set the XML namespace for the element.  Lastly,
   the attribute sets the IsNullable property, which specifies whether
   the xsi:null attribute appears if the class instance is set to
   a null reference. */
[XmlRootAttribute("PurchaseOrder", Namespace="http://www.cpandl.com",
IsNullable = false)]
public class PurchaseOrder
{
   public Address ShipTo;
   public string OrderDate;
   /* The XmlArrayAttribute changes the XML element name
    from the default of "OrderedItems" to "Items". */
   [XmlArrayAttribute("Items")]
   public OrderedItem[] OrderedItems;
   public decimal SubTotal;
   public decimal ShipCost;
   public decimal TotalCost;
}

public class Address
{
   /* The XmlAttribute instructs the XmlSerializer to serialize the Name
      field as an XML attribute instead of an XML element (the default
      behavior). */
   [XmlAttribute]
   public string Name;
   public string Line1;

   /* Setting the IsNullable property to false instructs the
      XmlSerializer that the XML attribute will not appear if
      the City field is set to a null reference. */
   [XmlElementAttribute(IsNullable = false)]
   public string City;
   public string State;
   public string Zip;
}

public class OrderedItem
{
   public string ItemName;
   public string Description;
   public decimal UnitPrice;
   public int Quantity;
   public decimal LineTotal;

   /* Calculate is a custom method that calculates the price per item,
      and stores the value in a field. */
   public void Calculate()
   {
      LineTotal = UnitPrice * Quantity;
   }
}

public class Test
{
   public static void Main()
   {
      // Read and write purchase orders.
      Test t = new Test();
      t.CreatePO("po.xml");
      t.ReadPO("po.xml");
   }

   private void CreatePO(string filename)
   {
      // Create an instance of the XmlSerializer class;
      // specify the type of object to serialize.
      XmlSerializer serializer =
      new XmlSerializer(typeof(PurchaseOrder));
      TextWriter writer = new StreamWriter(filename);
      PurchaseOrder po=new PurchaseOrder();

      // Create an address to ship and bill to.
      Address billAddress = new Address();
      billAddress.Name = "Teresa Atkinson";
      billAddress.Line1 = "1 Main St.";
      billAddress.City = "AnyTown";
      billAddress.State = "WA";
      billAddress.Zip = "00000";
      // Set ShipTo and BillTo to the same addressee.
      po.ShipTo = billAddress;
      po.OrderDate = System.DateTime.Now.ToLongDateString();

      // Create an OrderedItem object.
      OrderedItem i1 = new OrderedItem();
      i1.ItemName = "Widget S";
      i1.Description = "Small widget";
      i1.UnitPrice = (decimal) 5.23;
      i1.Quantity = 3;
      i1.Calculate();

      // Insert the item into the array.
      OrderedItem [] items = {i1};
      po.OrderedItems = items;
      // Calculate the total cost.
      decimal subTotal = new decimal();
      foreach(OrderedItem oi in items)
      {
         subTotal += oi.LineTotal;
      }
      po.SubTotal = subTotal;
      po.ShipCost = (decimal) 12.51;
      po.TotalCost = po.SubTotal + po.ShipCost;
      // Serialize the purchase order, and close the TextWriter.
      serializer.Serialize(writer, po);
      writer.Close();
   }

   protected void ReadPO(string filename)
   {
      // Create an instance of the XmlSerializer class;
      // specify the type of object to be deserialized.
      XmlSerializer serializer = new XmlSerializer(typeof(PurchaseOrder));
      /* If the XML document has been altered with unknown
      nodes or attributes, handle them with the
      UnknownNode and UnknownAttribute events.*/
      serializer.UnknownNode+= new
      XmlNodeEventHandler(serializer_UnknownNode);
      serializer.UnknownAttribute+= new
      XmlAttributeEventHandler(serializer_UnknownAttribute);

      // A FileStream is needed to read the XML document.
      FileStream fs = new FileStream(filename, FileMode.Open);
      // Declare an object variable of the type to be deserialized.
      PurchaseOrder po;
      /* Use the Deserialize method to restore the object's state with
      data from the XML document. */
      po = (PurchaseOrder) serializer.Deserialize(fs);
      // Read the order date.
      Console.WriteLine ("OrderDate: " + po.OrderDate);

      // Read the shipping address.
      Address shipTo = po.ShipTo;
      ReadAddress(shipTo, "Ship To:");
      // Read the list of ordered items.
      OrderedItem [] items = po.OrderedItems;
      Console.WriteLine("Items to be shipped:");
      foreach(OrderedItem oi in items)
      {
         Console.WriteLine("\t"+
         oi.ItemName + "\t" +
         oi.Description + "\t" +
         oi.UnitPrice + "\t" +
         oi.Quantity + "\t" +
         oi.LineTotal);
      }
      // Read the subtotal, shipping cost, and total cost.
      Console.WriteLine("\t\t\t\t\t Subtotal\t" + po.SubTotal);
      Console.WriteLine("\t\t\t\t\t Shipping\t" + po.ShipCost);
      Console.WriteLine("\t\t\t\t\t Total\t\t" + po.TotalCost);
   }

   protected void ReadAddress(Address a, string label)
   {
      // Read the fields of the Address object.
      Console.WriteLine(label);
      Console.WriteLine("\t"+ a.Name );
      Console.WriteLine("\t" + a.Line1);
      Console.WriteLine("\t" + a.City);
      Console.WriteLine("\t" + a.State);
      Console.WriteLine("\t" + a.Zip );
      Console.WriteLine();
   }

   private void serializer_UnknownNode
   (object sender, XmlNodeEventArgs e)
   {
      Console.WriteLine("Unknown Node:" +   e.Name + "\t" + e.Text);
   }

   private void serializer_UnknownAttribute
   (object sender, XmlAttributeEventArgs e)
   {
      System.Xml.XmlAttribute attr = e.Attr;
      Console.WriteLine("Unknown attribute " +
      attr.Name + "='" + attr.Value + "'");
   }
}

Comentarios

Para obtener más información sobre esta API, consulte Comentarios complementarios de api para XmlSerializer.

Constructores

XmlSerializer()

Inicializa una nueva instancia de la clase XmlSerializer.

XmlSerializer(Type)

Inicializa una nueva instancia de la clase XmlSerializer que puede serializar objetos del tipo especificado en documentos XML y deserializar documentos XML en objetos del tipo especificado.

XmlSerializer(Type, String)

Inicializa una nueva instancia de la clase XmlSerializer que puede serializar objetos del tipo especificado en documentos XML y deserializar documentos XML en objetos del tipo especificado. Especifica el espacio de nombres predeterminado para todos los elementos XML.

XmlSerializer(Type, Type[])

Inicializa una nueva instancia de la clase XmlSerializer que puede serializar objetos del tipo especificado en documentos XML y deserializar documentos XML en objetos del tipo especificado. Si una propiedad o un campo devuelve una matriz, el parámetro extraTypes especifica aquellos objetos que pueden insertarse en la matriz.

XmlSerializer(Type, XmlAttributeOverrides)

Inicializa una nueva instancia de la clase XmlSerializer que puede serializar objetos del tipo especificado en documentos XML y deserializar documentos XML en objetos del tipo especificado. Cada objeto que se ha de serializar también puede contener instancias de clases, que esta sobrecarga puede reemplazar con otras clases.

XmlSerializer(Type, XmlAttributeOverrides, Type[], XmlRootAttribute, String)

Inicializa una nueva instancia de la clase XmlSerializer que puede serializar objetos del tipo Object en instancias de documentos XML y deserializar instancias de documentos XML en objetos del tipo Object. Cada objeto que se ha de serializar también puede contener instancias de clases, que esta sobrecarga reemplaza con otras clases. Esta sobrecarga especifica asimismo el espacio de nombres predeterminado para todos los elementos XML, así como la clase que se ha de utilizar como elemento raíz XML.

XmlSerializer(Type, XmlAttributeOverrides, Type[], XmlRootAttribute, String, String)

Inicializa una nueva instancia de la clase XmlSerializer que puede serializar objetos del tipo Object en instancias de documentos XML y deserializar instancias de documentos XML en objetos del tipo Object. Cada objeto que se ha de serializar también puede contener instancias de clases, que esta sobrecarga reemplaza con otras clases. Esta sobrecarga especifica asimismo el espacio de nombres predeterminado para todos los elementos XML, así como la clase que se ha de utilizar como elemento raíz XML.

XmlSerializer(Type, XmlAttributeOverrides, Type[], XmlRootAttribute, String, String, Evidence)
Obsoletos.

Inicializa una nueva instancia de la clase XmlSerializer que puede serializar objetos del tipo especificado en instancias de documentos XML y deserializar instancias de documentos XML en objetos del tipo especificado. Esta sobrecarga permite proporcionar otros tipos que se pueden encontrar durante una operación de serialización o deserialización, así como un espacio de nombres predeterminado para todos los elementos XML, la clase que se debe utilizar como elemento raíz de XML, su ubicación y las credenciales requerida para el acceso.

XmlSerializer(Type, XmlRootAttribute)

Inicializa una nueva instancia de la clase XmlSerializer que puede serializar objetos del tipo especificado en documentos XML y deserializar un documento XML en un objeto del tipo especificado. Especifica también la clase que se utilizará como elemento raíz XML.

XmlSerializer(XmlTypeMapping)

Inicializa una instancia de la clase XmlSerializer utilizando un objeto que asigna un tipo a otro.

Métodos

CanDeserialize(XmlReader)

Obtiene un valor que indica si este XmlSerializer puede deserializar un documento XML especificado.

CreateReader()

Devuelve un objeto utilizado para leer el documento XML que se va a serializar.

CreateWriter()

Cuando se reemplaza en una clase derivada, devuelve un sistema de escritura para serializar el objeto.

Deserialize(Stream)

Deserializa un documento XML que contiene el Stream especificado.

Deserialize(TextReader)

Deserializa un documento XML que contiene el TextReader especificado.

Deserialize(XmlReader)

Deserializa un documento XML que contiene el XmlReader especificado.

Deserialize(XmlReader, String)

Deserializa un documento XML que contiene el XmlReader especificado y el estilo de codificación.

Deserialize(XmlReader, String, XmlDeserializationEvents)

Deserializa el objeto utilizando los datos que se encuentran en el XmlReader especificado.

Deserialize(XmlReader, XmlDeserializationEvents)

Deserializa un documento XML que se encuentra en el XmlReader especificado y permite reemplazar los eventos que se producen durante la deserialización.

Deserialize(XmlSerializationReader)

Deserializa un documento XML que contiene el XmlSerializationReader especificado.

Equals(Object)

Determina si el objeto especificado es igual que el objeto actual.

(Heredado de Object)
FromMappings(XmlMapping[])

Devuelve una matriz de objetos XmlSerializer creada a partir de una matriz de objetos XmlTypeMapping.

FromMappings(XmlMapping[], Evidence)
Obsoletos.

Devuelve una instancia de la clase XmlSerializer creada a partir de las asignaciones de un tipo de XML a otro.

FromMappings(XmlMapping[], Type)

Devuelve una instancia de la clase XmlSerializer a partir de las asignaciones especificadas.

FromTypes(Type[])

Devuelve una matriz de objetos XmlSerializer creada a partir de una matriz de tipos.

GenerateSerializer(Type[], XmlMapping[])

Devuelve un ensamblado que contiene los serializadores personalizados utilizados para serializar o deserializar los tipos especificados, utilizando las asignaciones especificadas.

GenerateSerializer(Type[], XmlMapping[], CompilerParameters)

Devuelve un ensamblado que contiene los serializadores personalizados utilizados para serializar o deserializar los tipos especificados, utilizando las asignaciones especificadas y las configuraciones y opciones del compilador.

GetHashCode()

Sirve como la función hash predeterminada.

(Heredado de Object)
GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
GetXmlSerializerAssemblyName(Type)

Devuelve el nombre del ensamblado que contiene una o más versiones de XmlSerializer creado especialmente para serializar o deserializar el tipo especificado.

GetXmlSerializerAssemblyName(Type, String)

Devuelve el nombre del ensamblado que contiene el serializador para el tipo especificado en el espacio de nombres especificado.

MemberwiseClone()

Crea una copia superficial del Object actual.

(Heredado de Object)
Serialize(Object, XmlSerializationWriter)

Serializa el Object especificado y escribe el documento XML en un archivo utilizando el XmlSerializationWriter especificado.

Serialize(Stream, Object)

Serializa el Object especificado y escribe el documento XML en un archivo utilizando el Stream especificado.

Serialize(Stream, Object, XmlSerializerNamespaces)

Serializa el Object especificado y escribe el documento XML en un archivo utilizando el Stream especificado, que hace referencia a los espacios de nombres especificados.

Serialize(TextWriter, Object)

Serializa el Object especificado y escribe el documento XML en un archivo utilizando el TextWriter especificado.

Serialize(TextWriter, Object, XmlSerializerNamespaces)

Serializa el objeto Object especificado, escribe el documento XML en un archivo utilizando el objeto TextWriter especificado y hace referencia a los espacios de nombres especificados.

Serialize(XmlWriter, Object)

Serializa el Object especificado y escribe el documento XML en un archivo utilizando el XmlWriter especificado.

Serialize(XmlWriter, Object, XmlSerializerNamespaces)

Serializa el objeto Object especificado, escribe el documento XML en un archivo utilizando el objeto XmlWriter especificado y hace referencia a los espacios de nombres especificados.

Serialize(XmlWriter, Object, XmlSerializerNamespaces, String)

Serializa el objeto especificado, escribe el documento XML en un archivo utilizando el XmlWriter especificado y hace referencia a los espacios de nombres especificados y al estilo de codificación.

Serialize(XmlWriter, Object, XmlSerializerNamespaces, String, String)

Serializa el Object especificado y escribe el documento XML en un archivo mediante el XmlWriter especificado, así como los espacios de nombres y la codificación especificados.

ToString()

Devuelve una cadena que representa el objeto actual.

(Heredado de Object)

Eventos

UnknownAttribute

Se produce cuando XmlSerializer detecta un atributo XML de tipo desconocido durante la deserialización.

UnknownElement

Se produce cuando XmlSerializer detecta un elemento XML de tipo desconocido durante la deserialización.

UnknownNode

Se produce cuando XmlSerializer detecta un nodo XML de tipo desconocido durante la deserialización.

UnreferencedObject

Se produce durante la deserialización de una secuencia XML con codificación SOAP, cuando XmlSerializer encuentra un tipo reconocido que no se utiliza o al que no se hace referencia.

Se aplica a

Produto Versións
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1
UWP 10.0

Seguridad para subprocesos

Este tipo es seguro para la ejecución de subprocesos.

Consulte también