Exportar (0) Imprimir
Expandir Tudo
Este artigo foi traduzido por máquina. Coloque o ponteiro do mouse sobre as frases do artigo para ver o texto original. Mais informações.
Tradução
Original

Classe DataContractSerializer

Serializa e desserializa uma instância de um tipo em um fluxo XML ou um documento usando um contrato de dados fornecidos. Esta classe não pode ser herdada.

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

Namespace:  System.Runtime.Serialization
Assembly:  System.Runtime.Serialization (em System.Runtime.Serialization.dll)

public sealed class DataContractSerializer : XmlObjectSerializer

O tipo DataContractSerializer expõe os membros a seguir.

  NomeDescrição
Método públicoCom suporte por Biblioteca de Classes PortátilCom suporte em .NET para aplicativos da Windows StoreDataContractSerializer(Type)Inicializa uma nova instância da classe DataContractSerializer para serializar ou desserializar um objeto do tipo especificado.
Método públicoCom suporte por Biblioteca de Classes PortátilCom suporte em .NET para aplicativos da Windows StoreDataContractSerializer(Type, IEnumerable<Type>)Inicializa uma nova instância da classe DataContractSerializer para serializar ou desserializar um objeto do tipo especificado, e uma coleção de tipos conhecidos que podem estar presente no objeto gráfico.
Método públicoCom suporte em .NET para aplicativos da Windows StoreDataContractSerializer(Type, DataContractSerializerSettings)Inicializa uma nova instância da classe DataContractSerializer para serializar ou desserializar um objeto do tipo e configurações especificados.
Método públicoCom suporte por Biblioteca de Classes PortátilCom suporte em .NET para aplicativos da Windows StoreDataContractSerializer(Type, String, String)Inicializa uma nova instância da classe DataContractSerializer para serializar ou desserializar um objeto do tipo especificado usando o elemento raiz e o fornecidos XML.
Método públicoCom suporte por Biblioteca de Classes PortátilCom suporte em .NET para aplicativos da Windows StoreDataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString)Inicializa uma nova instância da classe DataContractSerializer para serializar ou desserializar um objeto do tipo especificado usando o elemento raiz e namespace XML especificados com os parâmetros de tipo XmlDictionaryString.
Método públicoCom suporte por Biblioteca de Classes PortátilCom suporte em .NET para aplicativos da Windows StoreDataContractSerializer(Type, String, String, IEnumerable<Type>)Inicializa uma nova instância da classe DataContractSerializer para serializar ou desserializar um objeto do tipo especificado. Esse método também especifica o elemento raiz XML e o namespace em dois parâmetros da cadeia de caracteres assim como em uma lista de tipos conhecidos que podem estar presente no objeto gráfico.
Método públicoCom suporte por Biblioteca de Classes PortátilCom suporte em .NET para aplicativos da Windows StoreDataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString, IEnumerable<Type>)Inicializa uma nova instância da classe DataContractSerializer para serializar ou desserializar um objeto do tipo especificado. Esse método também especifica o elemento raiz XML e o namespace em dois parâmetros de XmlDictionaryString assim como em uma lista de tipos conhecidos que podem estar presente no objeto gráfico.
Método públicoDataContractSerializer(Type, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate)Inicializa uma nova instância da classe DataContractSerializer para serializar ou desserializar um objeto do tipo especificado. Esse método também especifica uma lista de tipos conhecidos que podem estar presentes no objeto gráfico, no número máximo de itens de gráfico para serializar, os parâmetros para ignorar dados inesperados, usar construções não padronizadas XML para preservar dados de referência de objeto no gráfico, e um alternativo para a serialização personalizada.
Método públicoDataContractSerializer(Type, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate, DataContractResolver)Inicializa uma nova instância da classe DataContractSerializer para serializar ou desserializar um objeto do tipo especificado. Esse método também especifica uma lista de tipos conhecidos que podem estar presentes no objeto gráfico, no número máximo de itens de gráfico para serializar, os parâmetros para ignorar dados inesperados, usar construções não padronizadas XML para preservar dados de referência de objeto no gráfico, um alternativo para a serialização personalizada, e uma alternativa para mapear declarações de xsi:type em tempo de execução.
Método públicoDataContractSerializer(Type, String, String, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate)Inicializa uma nova instância da classe DataContractSerializer para serializar ou desserializar um objeto do tipo especificado. Esse método também especifica uma lista de tipos conhecidos que podem estar presentes no objeto gráfico, o número máximo de itens de gráfico para serializar, os parâmetros para ignorar dados inesperados, usar as construções não padronizadas XML para preservar dados de referência de objeto no gráfico, um alternativo para a serialização personalizada, e o elemento XML e o que contêm o conteúdo.
Método públicoDataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate)Inicializa uma nova instância da classe DataContractSerializer para serializar ou desserializar um objeto do tipo especificado. Esse método também especifica uma lista de tipos conhecidos que podem estar presentes no objeto gráfico, no número máximo de itens de gráfico para serializar, os parâmetros para ignorar dados inesperados, usar construções não padronizadas XML para preservar dados de referência de objeto no gráfico, um alternativo para a serialização personalizada, e os parâmetros de XmlDictionaryString que especificam o elemento XML e o que contêm o conteúdo.
Método públicoDataContractSerializer(Type, String, String, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate, DataContractResolver)Inicializa uma nova instância da classe DataContractSerializer para serializar ou desserializar um objeto do tipo especificado. Esse método também especifica uma lista de tipos conhecidos que podem estar presentes no objeto gráfico, o número máximo de itens de gráfico para serializar, os parâmetros para ignorar dados inesperados, usar construções não padronizadas XML para preservar dados de referência de objeto no gráfico, um alternativo para a serialização personalizada, o elemento XML e o namespace que contém o conteúdo, e uma alternativa para mapear declarações de xsi:type em tempo de execução.
Método públicoDataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate, DataContractResolver)Inicializa uma nova instância da classe DataContractSerializer para serializar ou desserializar um objeto do tipo especificado. Esse método também especifica uma lista de tipos conhecidos que podem estar presentes no objeto gráfico, o número máximo de itens de gráfico para serializar, os parâmetros para ignorar dados inesperados, usar construções não padronizadas XML para preservar dados de referência de objeto no gráfico, um alternativo para a serialização personalizada, os parâmetros de XmlDictionaryString que especificam o elemento XML e o namespace que contém o conteúdo, e uma alternativa para mapear declarações de xsi:type em tempo de execução.
Superior

  NomeDescrição
Propriedade públicaDataContractResolverObtém o componente usado para mapear dinamicamente tipos conhecidos do contrato das declarações de xsi:type .
Propriedade públicaDataContractSurrogateObtém um tipo substituta que pode estender a serialização ou o processo de desserialização.
Propriedade públicaCom suporte por Biblioteca de Classes PortátilCom suporte em .NET para aplicativos da Windows StoreIgnoreExtensionDataObjectObtém um valor que especifica se ignorar os dados fornecidos por uma extensão da classe quando a classe serializada ou desserializado.
Propriedade públicaCom suporte por Biblioteca de Classes PortátilCom suporte em .NET para aplicativos da Windows StoreKnownTypesObtém uma coleção de tipos que podem estar presentes no objeto gráfico serializado usando essa instância de DataContractSerializer.
Propriedade públicaCom suporte por Biblioteca de Classes PortátilCom suporte em .NET para aplicativos da Windows StoreMaxItemsInObjectGraphObtém o número máximo de itens em um objeto gráfico para serializar e desserializar.
Propriedade públicaCom suporte por Biblioteca de Classes PortátilCom suporte em .NET para aplicativos da Windows StorePreserveObjectReferencesObtém um valor que especifica se usar construções não padronizadas XML para preservar dados de referência de objeto.
Propriedade públicaCom suporte em .NET para aplicativos da Windows StoreSerializeReadOnlyTypesObtém um valor que especifica se os tipos somente leitura são serializados.
Superior

  NomeDescrição
Método públicoCom suporte por Biblioteca de Classes PortátilCom suporte em .NET para aplicativos da Windows StoreEquals(Object) Verifica se o objeto especificado é igual ao objeto atual. (Herdado de Object.)
Método públicoCom suporte por Biblioteca de Classes PortátilCom suporte em .NET para aplicativos da Windows StoreGetHashCodeServe como a função de hash padrão. (Herdado de Object.)
Método públicoCom suporte por Biblioteca de Classes PortátilCom suporte em .NET para aplicativos da Windows StoreGetType Obtém o Type da instância atual. (Herdado de Object.)
Método públicoCom suporte por Biblioteca de Classes PortátilCom suporte em .NET para aplicativos da Windows StoreIsStartObject(XmlDictionaryReader)Determina se XmlDictionaryReader está localizado em um objeto que pode ser desserializado. (Substitui XmlObjectSerializer.IsStartObject(XmlDictionaryReader).)
Método públicoCom suporte por Biblioteca de Classes PortátilCom suporte em .NET para aplicativos da Windows StoreIsStartObject(XmlReader)Determina se XmlReader está localizado em um objeto que pode ser desserializado. (Substitui XmlObjectSerializer.IsStartObject(XmlReader).)
Método públicoCom suporte por Biblioteca de Classes PortátilCom suporte em .NET para aplicativos da Windows StoreReadObject(Stream)Lê o fluxo de XML ou um documento com um Stream e retorna um objeto serializado. (Herdado de XmlObjectSerializer.)
Método públicoCom suporte por Biblioteca de Classes PortátilCom suporte em .NET para aplicativos da Windows StoreReadObject(XmlDictionaryReader)Lê o documento XML ou fluxo com um XmlDictionaryReader e retorna um objeto serializado. (Herdado de XmlObjectSerializer.)
Método públicoCom suporte por Biblioteca de Classes PortátilCom suporte em .NET para aplicativos da Windows StoreReadObject(XmlReader)Ler o fluxo XML com XmlReader e retorna o objeto desserializado. (Substitui XmlObjectSerializer.ReadObject(XmlReader).)
Método públicoCom suporte por Biblioteca de Classes PortátilCom suporte em .NET para aplicativos da Windows StoreReadObject(XmlDictionaryReader, Boolean)Ler o fluxo XML com XmlDictionaryReader e retorna o objeto desserializado, e também especifica se uma verificação é feita para verificar o nome do objeto antes de ler o valor. (Substitui XmlObjectSerializer.ReadObject(XmlDictionaryReader, Boolean).)
Método públicoCom suporte por Biblioteca de Classes PortátilCom suporte em .NET para aplicativos da Windows StoreReadObject(XmlReader, Boolean)Ler o fluxo XML com XmlReader e retorna o objeto desserializado, e também especifica se uma verificação é feita para verificar o nome do objeto antes de ler o valor. (Substitui XmlObjectSerializer.ReadObject(XmlReader, Boolean).)
Método públicoReadObject(XmlDictionaryReader, Boolean, DataContractResolver)Ler um fluxo de documento XML ou documento e retorna o objeto desserializado. O método inclui um parâmetro para especificar se o nome de objeto é verificado é validado, e um resolvedor para mapear declarações de xsi:type em tempo de execução.
Método públicoCom suporte por Biblioteca de Classes PortátilCom suporte em .NET para aplicativos da Windows StoreToStringRetorna uma string que representa o objeto atual. (Herdado de Object.)
Método públicoCom suporte por Biblioteca de Classes PortátilCom suporte em .NET para aplicativos da Windows StoreWriteEndObject(XmlDictionaryWriter)Grava o elemento XML de fechamento usando XmlDictionaryWriter. (Substitui XmlObjectSerializer.WriteEndObject(XmlDictionaryWriter).)
Método públicoCom suporte por Biblioteca de Classes PortátilCom suporte em .NET para aplicativos da Windows StoreWriteEndObject(XmlWriter)Grava o elemento XML de fechamento usando XmlWriter. (Substitui XmlObjectSerializer.WriteEndObject(XmlWriter).)
Método públicoCom suporte por Biblioteca de Classes PortátilCom suporte em .NET para aplicativos da Windows StoreWriteObject(Stream, Object)Grava o conteúdo completo (início, conteúdo e final) do objeto ao documento XML ou fluxo com o especificado Stream. (Herdado de XmlObjectSerializer.)
Método públicoCom suporte por Biblioteca de Classes PortátilCom suporte em .NET para aplicativos da Windows StoreWriteObject(XmlDictionaryWriter, Object)Grava o conteúdo completo (início, conteúdo e final) do objeto ao documento XML ou fluxo com o especificado XmlDictionaryWriter. (Herdado de XmlObjectSerializer.)
Método públicoCom suporte por Biblioteca de Classes PortátilCom suporte em .NET para aplicativos da Windows StoreWriteObject(XmlWriter, Object)Grava os dados de objeto (começando o elemento XML, conteúdo, e fechando o elemento) a um documento XML ou um fluxo com XmlWriter. (Substitui XmlObjectSerializer.WriteObject(XmlWriter, Object).)
Método públicoWriteObject(XmlDictionaryWriter, Object, DataContractResolver)Grava os dados de objeto (começando o elemento XML, conteúdo, e incluindo o elemento) a um documento XML ou um fluxo usando o XmlDictionaryWriter especificado. O método inclui um resolvedor para mapear declarações de xsi:type em tempo de execução.
Método públicoCom suporte por Biblioteca de Classes PortátilCom suporte em .NET para aplicativos da Windows StoreWriteObjectContent(XmlDictionaryWriter, Object)Grava o conteúdo XML usando XmlDictionaryWriter. (Substitui XmlObjectSerializer.WriteObjectContent(XmlDictionaryWriter, Object).)
Método públicoCom suporte por Biblioteca de Classes PortátilCom suporte em .NET para aplicativos da Windows StoreWriteObjectContent(XmlWriter, Object)Grava o conteúdo XML usando XmlWriter. (Substitui XmlObjectSerializer.WriteObjectContent(XmlWriter, Object).)
Método públicoCom suporte por Biblioteca de Classes PortátilCom suporte em .NET para aplicativos da Windows StoreWriteStartObject(XmlDictionaryWriter, Object)Grava o elemento XML de abertura usando XmlDictionaryWriter. (Substitui XmlObjectSerializer.WriteStartObject(XmlDictionaryWriter, Object).)
Método públicoCom suporte por Biblioteca de Classes PortátilCom suporte em .NET para aplicativos da Windows StoreWriteStartObject(XmlWriter, Object)Grava o elemento XML de abertura usando XmlWriter. (Substitui XmlObjectSerializer.WriteStartObject(XmlWriter, Object).)
Superior

Use a classe DataContractSerializer para serializar e desserializar instâncias de um tipo em um fluxo XML ou documento.
Por exemplo, você pode criar um tipo nomeado Person com as propriedades que contêm dados essenciais, como um nome e endereço. Você pode criar e manipular uma instância da classe de Person e escrever todos seus valores de propriedade em um documento XML para uma recuperação mais recente, ou em um fluxo XML para o transporte imediato. O mais importante, DataContractSerializer é usado para serializar e desserializar dados enviados em mensagens de Windows Communication Foundation (WCF) . Aplique o atributo de DataContractAttribute a classes, e o atributo de DataMemberAttribute para classificar membros para especificar as propriedades e campos que são serializados.

os tipos deUma lista de que podem ser serializados, consulte Tipos com suporte pelo serializador do contrato de dados.

Para usar DataContractSerializer, primeiro crie uma instância de uma classe e um objeto apropriado ao ler ou gravar o formato; por exemplo, uma instância de XmlDictionaryWriter. Chame o método de WriteObject para manter os dados. Para recuperar dados, crie um objeto apropriada para ler o formato de dados (como XmlDictionaryReader para um documento XML) e chame o método de ReadObject .

Para obter mais informações sobre usando DataContractSerializer, consulte Serialização e desserialização.

Você pode definir o tipo de um serializador do contrato de dados usando o elemento de <dataContractSerializer> em um arquivo de configuração de aplicativo cliente.

Preparando classes para serialização ou desserialização

DataContractSerializer é usado em combinação com as classes de DataContractAttribute e de DataMemberAttribute . Para preparar uma classe para serialização, aplicar DataContractAttribute à classe. Para cada membro da classe que retorna dados que você deseja serializar, aplicar DataMemberAttribute. Você pode serializar campos e propriedades, independentemente de acessibilidade: interno private, protected, interno, protegido, ou público.

Por exemplo, seu esquema especifica Customer com uma propriedade de ID , mas você já tiver um aplicativo existente que usa um tipo nomeado Person com uma propriedade de Name . Para criar um tipo que está de acordo com o contrato, aplique primeiro DataContractAttribute à classe. Aplicar em DataMemberAttribute para cada campo ou propriedade que você deseja publicar.

ObservaçãoObservação

Você pode aplicar DataMemberAttribute a membros públicos e particulares.

O formato final XML não precisa ser texto. Em vez disso, DataContractSerializer grava os dados como um infoset XML, que permite que você escreva os dados para qualquer formato reconhecido por XmlReader e por XmlWriter. É recomendável que você use as classes de XmlDictionaryReader e de XmlDictionaryWriter para ler e escrever, porque ambos são otimizados para trabalhar com DataContractSerializer.

Se você estiver criando uma classe que tem os campos ou propriedades que devem ser preenchidos antes de serialização ou desserialização de ocorre, o retorno de chamada uso de atributos, como descrito em Retornos de chamada de tolerantes de serialização.

Adicionar à coleção de tipos conhecidos

Quando serializar ou desserializar um objeto, ele são necessárias que o tipo “é conhecido como” DataContractSerializer. Inicie criando uma instância de uma classe que implementa IEnumerable<T> (como List<T>) e adicione os tipos conhecidos à coleção. Crie uma instância de DataContractSerializer usando uma das sobrecargas que leva IEnumerable<T> (por exemplo, DataContractSerializer(Type, IEnumerable<Type>).

ObservaçãoObservação

Diferentemente de outros tipos primitivos, a estrutura de DateTimeOffset não é um tipo conhecido por padrão, portanto deve manualmente ser adicionada à lista de tipos conhecidos (consulte Tipos de dados conhecidos contrato).

Encaminhar a compatibilidade

DataContractSerializer entende contratos de dados que foram criados para ser compatíveis com versões futuras do contrato. Esses tipos implementam a interface de IExtensibleDataObject . A interface apresenta a propriedade de ExtensionData que retorna um objeto de ExtensionDataObject . Para obter mais informações, consulte Contratos de dados compatíveis frontal.

Executar em confiança parcial

Ao criar uma instância do objeto alvo durante a desserialização, DataContractSerializer não chama o construtor do objeto alvo. Se você criar o tipo de DataContract [] que é acessível de confiança parcial (isto é, ele é público e um assembly que tem o atributo de AllowPartiallyTrustedCallers aplicado) e que executa algumas ações relacionadas à segurança, você deve estar ciente que o construtor não é chamado. Em particular, as seguintes técnicas não funcionam:

  • Se você tentar restringir o acesso de confiança parcial fazendo o construtor interna ou particular, ou adicionando LinkDemand para o construtor -- nenhuma desses tem qualquer efeito durante a desserialização em confiança parcial.

  • Se você codifica a classe pressupõe que o construtor executar, a classe pode obter em um estado inválido interno que é aproveitável.

O código exemplo a seguir mostra um tipo nomeado Person que é serializado por DataContractSerializer. O atributo de DataContractAttribute é aplicado à classe, e DataMemberAttribute é aplicado aos membros para instruir DataContractSerializer o que serializar.


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


.NET Framework

Com suporte em: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0

.NET Framework Client Profile

Com suporte em: 4, 3.5 SP1

Biblioteca de Classes Portátil

Com suporte em: Biblioteca de Classes Portátil

.NET para aplicativos da Windows Store

Com suporte em: Windows 8

.NET para aplicativos do Windows Phone

Com suporte em: Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Função Server Core sem suporte), Windows Server 2008 R2 (Função Server Core com suporte com o SP1 ou posterior, Itanium sem suporte)

O .NET Framework não oferece suporte a todas as versões de cada plataforma. Para obter uma lista das versões com suporte, consulte Requisitos do sistema do .NET Framework.

As instâncias da classe tem segurança de segmentos a não ser que quando a instância é usada com uma implementação de IDataContractSurrogate ou de DataContractResolver.

Contribuições da comunidade

ADICIONAR
Mostrar:
© 2014 Microsoft