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 NonSerializedAttribute

 

Publicado: octubre de 2016

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

Espacio de nombres:   System
Ensamblado:  mscorlib (en mscorlib.dll)

System.Object
  System.Attribute
    System.NonSerializedAttribute

[AttributeUsageAttribute(AttributeTargets.Field, Inherited = false)]
[ComVisibleAttribute(true)]
public sealed class NonSerializedAttribute : Attribute

NombreDescripción
System_CAPS_pubmethodNonSerializedAttribute()

Inicializa una nueva instancia de la clase NonSerializedAttribute.

NombreDescripción
System_CAPS_pubpropertyTypeId

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

NombreDescripción
System_CAPS_pubmethodEquals(Object)

Esta API admite la infraestructura producto y no está diseñada para usarse directamente desde el código. Devuelve un valor que indica si esta instancia equivale al objeto especificado. (Heredado de Attribute).

System_CAPS_pubmethodGetHashCode()

Devuelve el código hash de esta instancia.(Heredado de Attribute).

System_CAPS_pubmethodGetType()

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

System_CAPS_pubmethodIsDefaultAttribute()

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

System_CAPS_pubmethodMatch(Object)

Cuando se invalida en una clase derivada, devuelve un valor que indica si esta instancia es igual al objeto especificado. (Heredado de Attribute).

System_CAPS_pubmethodToString()

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

NombreDescripción
System_CAPS_pubinterfaceSystem_CAPS_privmethod_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Asigna un conjunto de nombres a un conjunto correspondiente de identificadores de envío.(Heredado de Attribute).

System_CAPS_pubinterfaceSystem_CAPS_privmethod_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Obtiene la información del tipo de un objeto, que puede utilizarse para obtener la información del tipo de una interfaz. (Heredado de Attribute).

System_CAPS_pubinterfaceSystem_CAPS_privmethod_Attribute.GetTypeInfoCount(UInt32)

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

(Heredado de Attribute).

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

Cuando se usa el BinaryFormatter o SoapFormatter clases para serializar un objeto, utilice el NonSerializedAttribute atributo para impedir que un campo que se está serializando. Por ejemplo, puede utilizar este atributo para evitar la serialización de datos confidenciales.

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

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

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

Si un campo no está serializado, pero todavía se requiere un valor predeterminado que se debe proporcionar tras la deserialización, puede crear un método que proporciona el campo con un valor y luego aplicar el OnDeserializedAttribute al método.

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

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 el NonSerializedAttribute en el objeto serializado.

System_CAPS_noteNota

El código usa el SoapFormatter clase para serializar el objeto. La clase se encuentra en 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.

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

.NET Framework
Disponible desde 1.1

Cualquier miembro ( Compartido en Visual Basic) estático público de este tipo es seguro para subprocesos. No se garantiza que los miembros de instancia sean seguros para subprocesos.

Volver al principio
Mostrar: