Ler em inglês

Compartilhar via


NonSerializedAttribute Classe

Definição

Indica que um campo de uma classe serializável não deve ser serializado. Essa classe não pode ser herdada.

C#
[System.AttributeUsage(System.AttributeTargets.Field, Inherited=false)]
public sealed class NonSerializedAttribute : Attribute
C#
[System.AttributeUsage(System.AttributeTargets.Field, Inherited=true)]
public sealed class NonSerializedAttribute : Attribute
C#
[System.AttributeUsage(System.AttributeTargets.Field, Inherited=false)]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class NonSerializedAttribute : Attribute
Herança
NonSerializedAttribute
Atributos

Exemplos

O exemplo a seguir demonstra a serialização de um objeto marcado com o SerializableAttribute atributo e o comportamento de um campo marcado com o NonSerializedAttribute objeto serializado.

Observação

O código usa a SoapFormatter classe para serializar o objeto. A classe é encontrada no system.runtime.serialization.formatters.soap.dll, que não é carregado por padrão em um projeto. Para executar o código, você deve adicionar uma referência à DLL ao seu projeto.

C#
using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Soap;
//using System.Runtime.Serialization.Formatters.Binary;

public class Test {
   public static void Main()  {

      // Creates a new TestSimpleObject object.
      TestSimpleObject obj = new TestSimpleObject();

      Console.WriteLine("Before serialization the object contains: ");
      obj.Print();

      // Opens a file and serializes the object into it in binary format.
      Stream stream = File.Open("data.xml", FileMode.Create);
      SoapFormatter formatter = new SoapFormatter();

      //BinaryFormatter formatter = new BinaryFormatter();

      formatter.Serialize(stream, obj);
      stream.Close();

      // Empties obj.
      obj = null;

      // Opens file "data.xml" and deserializes the object from it.
      stream = File.Open("data.xml", FileMode.Open);
      formatter = new SoapFormatter();

      //formatter = new BinaryFormatter();

      obj = (TestSimpleObject)formatter.Deserialize(stream);
      stream.Close();

      Console.WriteLine("");
      Console.WriteLine("After deserialization the object contains: ");
      obj.Print();
   }
}

// A test object that needs to be serialized.
[Serializable()]
public class TestSimpleObject  {

    public int member1;
    public string member2;
    public string member3;
    public double member4;

    // A field that is not serialized.
    [NonSerialized()] public string member5;

    public TestSimpleObject() {

        member1 = 11;
        member2 = "hello";
        member3 = "hello";
        member4 = 3.14159265;
        member5 = "hello world!";
    }

    public void Print() {

        Console.WriteLine("member1 = '{0}'", member1);
        Console.WriteLine("member2 = '{0}'", member2);
        Console.WriteLine("member3 = '{0}'", member3);
        Console.WriteLine("member4 = '{0}'", member4);
        Console.WriteLine("member5 = '{0}'", member5);
    }
}

Comentários

Ao usar as BinaryFormatter classes ou SoapFormatter para serializar um objeto, use o NonSerializedAttribute atributo para impedir que um campo seja serializado. Por exemplo, você pode usar esse atributo para impedir a serialização de dados confidenciais.

Os objetos de destino para o NonSerializedAttribute atributo são campos públicos e privados de uma classe serializável. Por padrão, as classes não são serializáveis, a menos que sejam marcadas com SerializableAttribute. Durante o processo de serialização, todos os campos públicos e privados de uma classe são serializados por padrão. Os campos marcados com NonSerializedAttribute são excluídos durante a serialização. Se você estiver usando a XmlSerializer classe para serializar um objeto, use a XmlIgnoreAttribute classe para obter a mesma funcionalidade. Como alternativa, implemente a ISerializable interface para controlar explicitamente o processo de serialização. Observe que as classes que implementam ISerializable ainda devem ser marcadas com SerializableAttribute.

Para aplicar a NonSerializedAttribute classe a um evento, defina o local do atributo como campo, conforme mostrado no código C# a seguir.

C#
[field:NonSerializedAttribute()]   
public event ChangedEventHandler Changed;  

Se um campo não for serializado, mas ainda exigir um valor padrão que deve ser fornecido após a desserialização, você poderá criar um método que forneça um valor ao campo e, em seguida, aplicar o OnDeserializedAttribute método.

Para obter mais informações sobre como usar atributos, consulte Atributos.

Construtores

NonSerializedAttribute()

Inicializa uma nova instância da classe NonSerializedAttribute.

Propriedades

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
.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
.NET Standard 2.0, 2.1

Confira também