Ler en inglés

Compartir por


NonSerializedAttribute Clase

Definición

Indica que no debe serializarse un campo de una clase serializable. Esta clase no puede heredarse.

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
Herencia
NonSerializedAttribute
Atributos

Ejemplos

En el ejemplo siguiente se muestra la serialización de un objeto marcado con el SerializableAttribute atributo y el comportamiento de un campo marcado con en NonSerializedAttribute el objeto serializado.

Nota

El código usa la SoapFormatter clase para serializar el objeto . La clase se encuentra en el system.runtime.serialization.formatters.soap.dll, que no se carga de forma predeterminada en un proyecto. Para ejecutar el código, debe agregar una referencia al archivo DLL al proyecto.

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

Comentarios

Al usar las BinaryFormatter clases o SoapFormatter para serializar un objeto, use el NonSerializedAttribute atributo para evitar que se serialice un campo. Por ejemplo, puede usar este atributo para evitar la serialización de datos confidenciales.

Los objetos de destino del NonSerializedAttribute atributo son campos públicos y privados de una clase serializable. De forma predeterminada, las clases no se pueden serializar a menos que estén marcadas con SerializableAttribute. Durante el proceso de serialización, todos los campos públicos y privados de una clase se serializan de forma predeterminada. Los campos marcados con NonSerializedAttribute se excluyen durante la serialización. Si usa la XmlSerializer clase para serializar un objeto, use la XmlIgnoreAttribute clase para obtener la misma funcionalidad. Como alternativa, implemente la ISerializable interfaz para controlar explícitamente el proceso de serialización. Tenga en cuenta que las clases que implementan ISerializable deben seguir marcadas con SerializableAttribute.

Para aplicar la NonSerializedAttribute clase a un evento, establezca la ubicación del atributo en el campo , como se muestra en el código de C# siguiente.

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

Si un campo no se serializa, pero todavía requiere un valor predeterminado que se debe proporcionar después de la deserialización, puede crear un método que proporcione el campo con un valor y, a continuación, aplique al OnDeserializedAttribute método .

Para obtener más información sobre el uso de atributos, vea Atributos.

Constructores

NonSerializedAttribute()

Inicializa una nueva instancia de la clase NonSerializedAttribute.

Propiedades

TypeId

Cuando se implementa en una clase derivada, obtiene un identificador único para este Attribute.

(Heredado de Attribute)

Métodos

Equals(Object)

Devuelve un valor que indica si esta instancia es igual que un objeto especificado.

(Heredado de Attribute)
GetHashCode()

Devuelve el código hash de esta instancia.

(Heredado de Attribute)
GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
IsDefaultAttribute()

Si se reemplaza en una clase derivada, indica si el valor de esta instancia es el valor predeterminado de la clase derivada.

(Heredado de Attribute)
Match(Object)

Cuando se invalida en una clase derivada, devuelve un valor que indica si esta instancia es igual a un objeto especificado.

(Heredado de Attribute)
MemberwiseClone()

Crea una copia superficial del Object actual.

(Heredado de Object)
ToString()

Devuelve una cadena que representa el objeto actual.

(Heredado de Object)

Implementaciones de interfaz explícitas

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

Asigna un conjunto de nombres a un conjunto correspondiente de identificadores de envío.

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

Obtiene la información de tipos de un objeto, que puede utilizarse para obtener la información de tipos de una interfaz.

(Heredado de Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Recupera el número de interfaces de información de tipo que proporciona un objeto (0 ó 1).

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

Proporciona acceso a las propiedades y los métodos expuestos por un objeto.

(Heredado de Attribute)

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
.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

Consulte también