Ler em inglês

Compartilhar via


DataMemberAttribute Classe

Definição

Quando aplicado ao membro de um tipo, especifica que o membro faz parte de um contrato de dados e pode ser serializado por DataContractSerializer.

C#
[System.AttributeUsage(System.AttributeTargets.Field | System.AttributeTargets.Property, AllowMultiple=false, Inherited=false)]
public sealed class DataMemberAttribute : Attribute
Herança
DataMemberAttribute
Atributos

Exemplos

O exemplo a seguir mostra um tipo ao qual os DataContractAttribute atributos e DataMemberAttribute foram aplicados. A Name propriedade no DataMemberAttribute é definida como "ID".

C#
using System;
using System.Collections;
using System.IO;
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()]
class Person : IExtensibleDataObject
{
    private string LastNameValue;
    // Apply the DataMemberAttribute to fields (or properties)
    // that must be serialized.
    [DataMember()]
    public string FirstName;

    [DataMember]
    public string LastName
    {
        get { return LastNameValue; }
        set { LastNameValue = value; }
    }

    [DataMember(Name = "ID")]
    public int IdNumber;

    // Note that you can apply the DataMemberAttribute to
    // a private field as well.
    [DataMember]
    private string Secret;

    public Person(string newfName, string newLName, int newIdNumber)
    {
        FirstName = newfName;
        LastName = newLName;
        IdNumber = newIdNumber;
        Secret = newfName + newLName + newIdNumber;
    }

    // The extensionDataValue field holds data from future versions
    // of the type.  This enables this type to be compatible with
    // future versions. The field is required to implement the
    // IExtensibleDataObject interface.

    private ExtensionDataObject extensionDatavalue;

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

public class Test
{
    public static void Main(string[] args)
    {
        try
        {
            WriteObject(@"DataMemberAttributeExample.xml");
            ReadObject(@"DataMemberAttributeExample.xml");
        }
        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)
    {
        // Create a new instance of the Person class.
        Person p1 = new Person("Zighetti", "Barbara", 101);
        FileStream writer = new FileStream(filename,
        FileMode.OpenOrCreate);
        DataContractSerializer ser =
            new DataContractSerializer(typeof(Person));
        ser.WriteObject(writer, p1);
        writer.Close();
    }

    public static void ReadObject(string filename)
    {
        // Deserialize an instance of the Person class
        // from an XML file.
        FileStream fs = new FileStream(filename,
        FileMode.OpenOrCreate);
        DataContractSerializer ser =
            new DataContractSerializer(typeof(Person));
        // Deserialize the data and read it from the instance.
        Person deserializedPerson = (Person)ser.ReadObject(fs);
        fs.Close();
        Console.WriteLine(String.Format("{0} {1}, ID: {2}",
        deserializedPerson.FirstName, deserializedPerson.LastName,
        deserializedPerson.IdNumber));
    }
}

Comentários

Aplique o DataMemberAttribute atributo em conjunto com o DataContractAttribute para identificar membros de um tipo que fazem parte de um contrato de dados. Um dos serializadores que podem serializar contratos de dados é o DataContractSerializer.

O modelo de contrato de dados é um modelo de "aceitação". Aplicar o a DataMemberAttribute um campo ou propriedade especifica explicitamente que o valor do membro será serializado. Por outro lado, o XmlSerializer serializa todos os campos públicos e propriedades de um tipo.

Cuidado

Você pode aplicar o a DataMemberAttribute campos ou propriedades privadas. Lembre-se de que os dados retornados pelo membro (mesmo que sejam privados) serão serializados e desserializados e, portanto, poderão ser exibidos ou interceptados por um usuário ou processo mal-intencionado.

Por padrão, o nome do membro CLR é usado como o nome do membro de dados. Ao definir a Name propriedade, você pode personalizar o nome do membro de dados. Isso pode ser usado para fornecer um nome que pode não ser permitido como um nome de membro CLR. Ao mapear para XML usando o DataContractSerializer, esse nome é usado como o nome do elemento de esquema em um tipo.

Observação

As propriedades às quais o DataMemberAttribute atributo foi aplicado devem ter campos get e set . Eles não podem ser get-only ou set-only. Para serializar uma propriedade que deve permanecer get-somente por design (por exemplo, uma propriedade que retorna uma coleção), considere aplicar o DataMemberAttribute ao campo de suporte.

Para obter mais informações sobre contratos de dados e membros de dados, consulte Usando contratos de dados. Para obter mais informações sobre nomes de membros, consulte Valores padrão do membro de dados.

Construtores

DataMemberAttribute()

Inicializa uma nova instância da classe DataMemberAttribute.

Propriedades

EmitDefaultValue

Obtém ou define um valor que especifica se o valor padrão deve ser serializado para um campo ou uma propriedade que está sendo serializada.

IsNameSetExplicitly

Obtém se Name tiver sido definido explicitamente.

IsRequired

Obtém ou define um valor que instrui o mecanismo de serialização, em que o membro deve estar presente durante a leitura ou desserialização.

Name

Obtém ou define um nome de membro de dados.

Order

Obtém ou define a ordem de serialização e desserialização de um membro.

TypeId

Quando implementado em uma classe derivada, obtém um identificador exclusivo para este Attribute.

(Herdado de Attribute)

Métodos

Equals(Object)

Retorna um valor que indica se essa instância é igual a um objeto especificado.

(Herdado de Attribute)
GetHashCode()

Retorna o código hash para a instância.

(Herdado de Attribute)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
IsDefaultAttribute()

Quando substituído em uma classe derivada, indica se o valor dessa instância é o valor padrão para a classe derivada.

(Herdado de Attribute)
Match(Object)

Quando substituído em uma classe derivada, retorna um valor que indica se essa instância é igual a um objeto especificado.

(Herdado de Attribute)
MemberwiseClone()

Cria uma cópia superficial do Object atual.

(Herdado de Object)
ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)

Implantações explícitas de interface

_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Mapeia um conjunto de nomes para um conjunto correspondente de identificadores de expedição.

(Herdado de Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Recupera as informações de tipo para um objeto, que pode ser usado para obter as informações de tipo para uma interface.

(Herdado de Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Retorna o número de interfaces de informações do tipo que um objeto fornece (0 ou 1).

(Herdado de Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Fornece acesso a propriedades e métodos expostos por um objeto.

(Herdado de Attribute)

Aplica-se a

Produto Versões
.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, 10
.NET Framework 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

Confira também