Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Clase DataContractSerializer

 

Publicado: octubre de 2016

Serializa y deserializa una instancia de un tipo en un flujo o en un documento XML utilizando un contrato de datos proporcionado. Esta clase no puede heredarse.

Espacio de nombres:   System.Runtime.Serialization
Ensamblado:  System.Runtime.Serialization (en System.Runtime.Serialization.dll)

System.Object
  System.Runtime.Serialization.XmlObjectSerializer
    System.Runtime.Serialization.DataContractSerializer

public sealed class DataContractSerializer : XmlObjectSerializer

NombreDescripción
System_CAPS_pubmethodDataContractSerializer(Type)

Inicializa una nueva instancia de la clase DataContractSerializer para serializar o deserializar un objeto del tipo especificado.

System_CAPS_pubmethodDataContractSerializer(Type, DataContractSerializerSettings)

Inicializa una nueva instancia de la DataContractSerializer clase para serializar o deserializar un objeto del tipo especificado y la configuración.

System_CAPS_pubmethodDataContractSerializer(Type, IEnumerable<Type>)

Inicializa una nueva instancia de la clase DataContractSerializer para serializar o deserializar un objeto del tipo especificado y una colección de tipos conocidos que pueden encontrarse en el gráfico de objetos.

System_CAPS_pubmethodDataContractSerializer(Type, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate)

Inicializa una nueva instancia de la clase DataContractSerializer para serializar o deserializar un objeto del tipo especificado. Este método también especifica una lista de tipos conocidos que pueden encontrarse en el gráfico de objetos, el número máximo de elementos de gráfico a serializar, parámetros para omitir los datos inesperados, si utilizar construcciones XML no estándar para conservar los datos de referencia a objeto en el gráfico, y un suplente para la serialización personalizada.

System_CAPS_pubmethodDataContractSerializer(Type, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate, DataContractResolver)

Inicializa una nueva instancia de la clase DataContractSerializer para serializar o deserializar un objeto del tipo especificado. Este método también especifica una lista de tipos conocidos que pueden estar presentes en el gráfico de objetos, el número máximo de elementos de gráfico a serializar, parámetros para omitir los datos inesperados, si se utiliza XML no estándar construcciones para conservar los datos de referencia de objeto en el gráfico, un suplente de serialización personalizada y una alternativa para la asignación de xsi:type declaraciones en tiempo de ejecución.

System_CAPS_pubmethodDataContractSerializer(Type, String, String)

Inicializa una nueva instancia de la clase DataContractSerializer para serializar o deserializar un objeto del tipo especificado utilizando el elemento raíz y el espacio de nombres XML proporcionados.

System_CAPS_pubmethodDataContractSerializer(Type, String, String, IEnumerable<Type>)

Inicializa una nueva instancia de la clase DataContractSerializer para serializar o deserializar un objeto del tipo especificado. Este método también especifica el elemento raíz y el espacio de nombres XML en dos parámetros de cadena así como una lista de tipos conocidos que pueden encontrarse en el gráfico de objetos.

System_CAPS_pubmethodDataContractSerializer(Type, String, String, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate)

Inicializa una nueva instancia de la clase DataContractSerializer para serializar o deserializar un objeto del tipo especificado. Este método también especifica una lista de tipos conocidos que pueden encontrarse en el gráfico de objetos, el número máximo de elementos de gráfico a serializar, parámetros para omitir los datos inesperados, si utilizar construcciones XML no estándar para conservar los datos de referencia a objeto en el gráfico, un suplente para la serialización personalizada, así como el elemento y el espacio de nombres XML que incluyen el contenido.

System_CAPS_pubmethodDataContractSerializer(Type, String, String, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate, DataContractResolver)

Inicializa una nueva instancia de la clase DataContractSerializer para serializar o deserializar un objeto del tipo especificado. Este método también especifica una lista de tipos conocidos que pueden estar presentes en el gráfico de objetos, el número máximo de elementos de gráfico a serializar, parámetros para omitir los datos inesperados, si se utiliza XML no estándar construcciones para conservar los datos de referencia de objeto en el gráfico, un suplente de serialización personalizada, el elemento XML y espacio de nombres que contiene el contenido y una alternativa para la asignación de xsi:type declaraciones en tiempo de ejecución.

System_CAPS_pubmethodDataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString)

Inicializa una nueva instancia de la clase DataContractSerializer para serializar o deserializar un objeto del tipo especificado utilizando el elemento raíz XML y el espacio de nombres especificados mediante los parámetros del tipo XmlDictionaryString.

System_CAPS_pubmethodDataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString, IEnumerable<Type>)

Inicializa una nueva instancia de la clase DataContractSerializer para serializar o deserializar un objeto del tipo especificado. Este método también especifica el elemento raíz y el espacio de nombres XML en dos parámetros XmlDictionaryString así como una lista de tipos conocidos que pueden encontrarse en el gráfico de objetos.

System_CAPS_pubmethodDataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate)

Inicializa una nueva instancia de la clase DataContractSerializer para serializar o deserializar un objeto del tipo especificado. Este método también especifica una lista de tipos conocidos que pueden encontrarse en el gráfico de objetos, el número máximo de elementos de gráfico a serializar, parámetros para omitir los datos inesperados, si utilizar construcciones XML no estándar para conservar los datos de referencia a objeto en el gráfico, un suplente para la serialización personalizada y parámetros de XmlDictionaryString que especifican el elemento y el espacio de nombres XML que incluyen el contenido.

System_CAPS_pubmethodDataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate, DataContractResolver)

Inicializa una nueva instancia de la clase DataContractSerializer para serializar o deserializar un objeto del tipo especificado. Este método también especifica una lista de tipos conocidos que pueden estar presentes en el gráfico de objetos, el número máximo de elementos de gráfico a serializar, parámetros para omitir los datos inesperados, si se utiliza XML no estándar construcciones para conservar los datos de referencia de objeto en el gráfico, un suplente para la serialización personalizada, parámetros de XmlDictionaryString que especifican el elemento XML y espacio de nombres que contiene el contenido , una alternativa para la asignación y xsi:type declaraciones en tiempo de ejecución.

NombreDescripción
System_CAPS_pubpropertyDataContractResolver

Obtiene el componente utilizado para asignar dinámicamente xsi:type las declaraciones de tipos de contrato conocidos.

System_CAPS_pubpropertyDataContractSurrogate

Obtiene un tipo de suplente que puede extender el proceso de serialización o deserialización.

System_CAPS_pubpropertyIgnoreExtensionDataObject

Obtiene un valor que especifica si omitir datos proporcionados por una extensión de la clase cuando la clase se serializa o deserializa.

System_CAPS_pubpropertyKnownTypes

Obtiene una colección de tipos que se pueden encontrarse en el gráfico de objetos serializado utilizando esta instancia de DataContractSerializer.

System_CAPS_pubpropertyMaxItemsInObjectGraph

Obtiene el número máximo de elementos de un gráfico de objetos que se van a serializar o deserializar.

System_CAPS_pubpropertyPreserveObjectReferences

Obtiene un valor que especifica si utilizar construcciones XML no estándar para conservar los datos de referencia al objeto.

System_CAPS_pubpropertySerializeReadOnlyTypes

Obtiene un valor que especifica si se serializan los tipos de sólo lectura.

NombreDescripción
System_CAPS_pubmethodEquals(Object)

Determina si el objeto especificado es igual al objeto actual.(Heredado de Object).

System_CAPS_pubmethodGetHashCode()

Sirve como la función hash predeterminada.(Heredado de Object).

System_CAPS_pubmethodGetType()

Obtiene el Type de la instancia actual.(Heredado de Object).

System_CAPS_pubmethodIsStartObject(XmlDictionaryReader)

Determina si XmlDictionaryReader se coloca en un objeto que se puede deserializar.(Invalida XmlObjectSerializer.IsStartObject(XmlDictionaryReader)).

System_CAPS_pubmethodIsStartObject(XmlReader)

Determina si XmlReader se coloca en un objeto que se puede deserializar.(Invalida XmlObjectSerializer.IsStartObject(XmlReader)).

System_CAPS_pubmethodReadObject(Stream)

Lee la secuencia o el documento XML con Stream y devuelve el objeto deserializado.(Heredado de XmlObjectSerializer).

System_CAPS_pubmethodReadObject(XmlDictionaryReader)

Lee el documento o la secuencia XML con XmlDictionaryReader y devuelve el objeto deserializado.(Heredado de XmlObjectSerializer).

System_CAPS_pubmethodReadObject(XmlDictionaryReader, Boolean)

Lee la secuencia XML con XmlDictionaryReader y devuelve el objeto deserializado y también especifica si se realiza una comprobación para comprobar el nombre de objeto antes de leer su valor.(Invalida XmlObjectSerializer.ReadObject(XmlDictionaryReader, Boolean)).

System_CAPS_pubmethodReadObject(XmlDictionaryReader, Boolean, DataContractResolver)

Lee un documento o secuencia del documento XML y devuelve el objeto deserializado. El método incluye un parámetro que especifica si se comprueba el nombre de objeto se valida y una resolución para asignar xsi:type declaraciones en tiempo de ejecución.

System_CAPS_pubmethodReadObject(XmlReader)

Lee el flujo XML con XmlReader y devuelve el objeto deserializado.(Invalida XmlObjectSerializer.ReadObject(XmlReader)).

System_CAPS_pubmethodReadObject(XmlReader, Boolean)

Lee la secuencia XML con XmlReader y devuelve el objeto deserializado y también especifica si se realiza una comprobación para comprobar el nombre de objeto antes de leer su valor.(Invalida XmlObjectSerializer.ReadObject(XmlReader, Boolean)).

System_CAPS_pubmethodToString()

Devuelve una cadena que representa el objeto actual.(Heredado de Object).

System_CAPS_pubmethodWriteEndObject(XmlDictionaryWriter)

Escribe el elemento XML de cierre mediante XmlDictionaryWriter.(Invalida XmlObjectSerializer.WriteEndObject(XmlDictionaryWriter)).

System_CAPS_pubmethodWriteEndObject(XmlWriter)

Escribe el elemento XML de cierre mediante XmlWriter.(Invalida XmlObjectSerializer.WriteEndObject(XmlWriter)).

System_CAPS_pubmethodWriteObject(Stream, Object)

Escribe todo el contenido (inicio, contenido y fin) del objeto en el documento o la secuencia XML con el Stream especificado.(Heredado de XmlObjectSerializer).

System_CAPS_pubmethodWriteObject(XmlDictionaryWriter, Object)

Escribe todo el contenido (inicio, contenido y fin) del objeto en el documento o la secuencia XML con el XmlDictionaryWriter especificado.(Heredado de XmlObjectSerializer).

System_CAPS_pubmethodWriteObject(XmlDictionaryWriter, Object, DataContractResolver)

Escribe todos los datos de objeto (elemento XML inicial, contenido y elemento envolvente) en un documento o secuencia XML usando el XmlDictionaryWriter especificado. El método incluye una resolución para asignar xsi:type declaraciones en tiempo de ejecución.

System_CAPS_pubmethodWriteObject(XmlWriter, Object)

Escribe todos los datos de objeto (elemento XML inicial, contenido y elemento de cierre) en un documento o secuencia XML con XmlWriter.(Invalida XmlObjectSerializer.WriteObject(XmlWriter, Object)).

System_CAPS_pubmethodWriteObjectContent(XmlDictionaryWriter, Object)
System_CAPS_pubmethodWriteObjectContent(XmlWriter, Object)

Escribe el contenido XML mediante XmlWriter.(Invalida XmlObjectSerializer.WriteObjectContent(XmlWriter, Object)).

System_CAPS_pubmethodWriteStartObject(XmlDictionaryWriter, Object)

Escribe el elemento XML de apertura mediante XmlDictionaryWriter.(Invalida XmlObjectSerializer.WriteStartObject(XmlDictionaryWriter, Object)).

System_CAPS_pubmethodWriteStartObject(XmlWriter, Object)

Escribe el elemento XML de apertura mediante XmlWriter.(Invalida XmlObjectSerializer.WriteStartObject(XmlWriter, Object)).

Use the T:System.Runtime.Serialization.DataContractSerializer class to serialize and deserialize instances of a type into an XML stream or document. For example, you can create a type named Person with properties that contain essential data, such as a name and address. You can then create and manipulate an instance of the Person class and write all of its property values in an XML document for later retrieval, or in an XML stream for immediate transport. Most important, the T:System.Runtime.Serialization.DataContractSerializer is used to serialize and deserialize data sent in indigo1 messages. Apply the T:System.Runtime.Serialization.DataContractAttribute attribute to classes, and the T:System.Runtime.Serialization.DataMemberAttribute attribute to class members to specify properties and fields that are serialized.

Para obtener una lista de types that can be serialized, see Tipos admitidos por el serializador de contrato de datos.

To use the T:System.Runtime.Serialization.DataContractSerializer, first create an instance of a class and an object appropriate to writing or reading the format; for example, an instance of the T:System.Xml.XmlDictionaryWriter. Then call the M:System.Runtime.Serialization.XmlObjectSerializer.WriteObject(System.Xml.XmlDictionaryWriter,System.Object) method to persist the data. To retrieve data, create an object appropriate to reading the data format (such as an T:System.Xml.XmlDictionaryReader for an XML document) and call the Overload:System.Runtime.Serialization.DataContractSerializer.ReadObject method.

Para obtener más información sobre using the DataContractSerializer, see Serialización y deserialización.

You can set the type of a data contract serializer using the <dataContractSerializer> element in a client application configuration file.

The T:System.Runtime.Serialization.DataContractSerializer is used in combination with the T:System.Runtime.Serialization.DataContractAttribute and T:System.Runtime.Serialization.DataMemberAttribute classes. To prepare a class for serialization, apply the T:System.Runtime.Serialization.DataContractAttribute to the class. For each member of the class that returns data that you want to serialize, apply the T:System.Runtime.Serialization.DataMemberAttribute. You can serialize fields and properties, regardless of accessibility: private, protected, internal, protected internal, or public.

For example, your schema specifies a Customer with an ID property, but you already have an existing application that uses a type named Person with a Name property. To create a type that conforms to the contract, first apply the T:System.Runtime.Serialization.DataContractAttribute to the class. Then apply the T:System.Runtime.Serialization.DataMemberAttribute to every field or property that you want to serialize.

System_CAPS_noteNota

You can apply the T:System.Runtime.Serialization.DataMemberAttribute to both private and public members.

The final format of the XML need not be text. Instead, the T:System.Runtime.Serialization.DataContractSerializer writes the data as an XML infoset, which allows you to write the data to any format recognized by the T:System.Xml.XmlReader and T:System.Xml.XmlWriter. It is recommended that you use the T:System.Xml.XmlDictionaryReader and T:System.Xml.XmlDictionaryWriter classes to read and write, because both are optimized to work with the T:System.Runtime.Serialization.DataContractSerializer.

If you are creating a class that has fields or properties that must be populated before the serialization or deserialization occurs, use callback attributes, as described in Version Tolerant Serialization Callbacks.

When serializing or deserializing an object, it is required that the type is "known" to the T:System.Runtime.Serialization.DataContractSerializer. Begin by creating an instance of a class that implements T:System.Collections.Generic.IEnumerable`1 (such as T:System.Collections.Generic.List`1) and adding the known types to the collection. Then create an instance of the T:System.Runtime.Serialization.DataContractSerializer using one of the overloads that takes the T:System.Collections.Generic.IEnumerable`1 (for example, M:System.Runtime.Serialization.DataContractSerializer.#ctor(System.Type,System.Collections.Generic.IEnumerable{System.Type}).

System_CAPS_noteNota

Unlike other primitive types, the T:System.DateTimeOffset structure is not a known type by default, so it must be manually added to the list of known types (see Data Contract Known Types).

The T:System.Runtime.Serialization.DataContractSerializer understands data contracts that have been designed to be compatible with future versions of the contract. Such types implement the T:System.Runtime.Serialization.IExtensibleDataObject interface. The interface features the P:System.Runtime.Serialization.IExtensibleDataObject.ExtensionData property that returns an T:System.Runtime.Serialization.ExtensionDataObject object. crdefaultForward Compatible Data Contracts.

When instantiating the target object during deserialization, the T:System.Runtime.Serialization.DataContractSerializer does not call the constructor of the target object. If you author a [DataContract] type that is accessible from partial trust (that is, it is public and in an assembly that has the AllowPartiallyTrustedCallers attribute applied) and that performs some security-related actions, you must be aware that the constructor is not called. In particular, the following techniques do not work:

  • If you try to restrict partial trust access by making the constructor internal or private, or by adding a LinkDemand to the constructor -- neither of these have any effect during deserialization under partial trust.

  • If you code the class that assumes the constructor has run, the class may get into an invalid internal state that is exploitable.

The following example code shows a type named Person that is serialized by the T:System.Runtime.Serialization.DataContractSerializer. The T:System.Runtime.Serialization.DataContractAttribute attribute is applied to the class, and the T:System.Runtime.Serialization.DataMemberAttribute is applied to members to instruct the T:System.Runtime.Serialization.DataContractSerializer what to serialize.

namespace DataContractSerializerExample
{
    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Runtime.Serialization;
    using System.Xml;

    // You must apply a DataContractAttribute or SerializableAttribute
    // to a class to have it serialized by the DataContractSerializer.
    [DataContract(Name = "Customer", Namespace = "http://www.contoso.com")]
    class Person : IExtensibleDataObject
    {
        [DataMember()]
        public string FirstName;
        [DataMember]
        public string LastName;
        [DataMember()]
        public int ID;

        public Person(string newfName, string newLName, int newID)
        {
            FirstName = newfName;
            LastName = newLName;
            ID = newID;
        }

        private ExtensionDataObject extensionData_Value;

        public ExtensionDataObject ExtensionData
        {
            get
            {
                return extensionData_Value;
            }
            set
            {
                extensionData_Value = value;
            }
        }
    }

    public sealed class Test
    {
        private Test() { }

        public static void Main()
        {
            try
            {
                WriteObject("DataContractSerializerExample.xml");
                ReadObject("DataContractSerializerExample.xml");

            }

            catch (SerializationException serExc)
            {
                Console.WriteLine("Serialization Failed");
                Console.WriteLine(serExc.Message);
            }
            catch (Exception exc)
            {
                Console.WriteLine(
                "The serialization operation failed: {0} StackTrace: {1}",
                exc.Message, exc.StackTrace);
            }

            finally
            {
                Console.WriteLine("Press <Enter> to exit....");
                Console.ReadLine();
            }
        }

        public static void WriteObject(string fileName)
        {
            Console.WriteLine(
                "Creating a Person object and serializing it.");
            Person p1 = new Person("Zighetti", "Barbara", 101);
            FileStream writer = new FileStream(fileName, FileMode.Create);
            DataContractSerializer ser =
                new DataContractSerializer(typeof(Person));
            ser.WriteObject(writer, p1);
            writer.Close();
        }

        public static void ReadObject(string fileName)
        {
            Console.WriteLine("Deserializing an instance of the object.");
            FileStream fs = new FileStream(fileName,
            FileMode.Open);
            XmlDictionaryReader reader =
                XmlDictionaryReader.CreateTextReader(fs, new XmlDictionaryReaderQuotas());
            DataContractSerializer ser = new DataContractSerializer(typeof(Person));

            // Deserialize the data and read it from the instance.
            Person deserializedPerson =
                (Person)ser.ReadObject(reader, true);
            reader.Close();
            fs.Close();
            Console.WriteLine(String.Format("{0} {1}, ID: {2}",
            deserializedPerson.FirstName, deserializedPerson.LastName,
            deserializedPerson.ID));
        }
    }

Plataforma universal de Windows
Disponible desde 8
.NET Framework
Disponible desde 3.0
Biblioteca de clases portable
Se admite en: plataformas portátiles de .NET
Silverlight
Disponible desde 2.0
Windows Phone Silverlight
Disponible desde 7.0
Windows Phone
Disponible desde 8.1

Instances of this class are thread safe except when the instance is used with an implementation of the T:System.Runtime.Serialization.IDataContractSurrogate or T:System.Runtime.Serialization.DataContractResolver.

Volver al principio
Mostrar: