FormatterServices.GetSerializableMembers Método

Definición

Devuelve todos los miembros serializables para una clase determinada.Returns all the serializable members for a particular class.

Sobrecargas

GetSerializableMembers(Type)

Obtiene todos los miembros serializables para una clase del Type especificado.Gets all the serializable members for a class of the specified Type.

GetSerializableMembers(Type, StreamingContext)

Obtiene todos los miembros serializables para una clase del Type especificado y en el StreamingContext proporcionado.Gets all the serializable members for a class of the specified Type and in the provided StreamingContext.

GetSerializableMembers(Type)

Obtiene todos los miembros serializables para una clase del Type especificado.Gets all the serializable members for a class of the specified Type.

public:
 static cli::array <System::Reflection::MemberInfo ^> ^ GetSerializableMembers(Type ^ type);
[System.Security.SecurityCritical]
public static System.Reflection.MemberInfo[] GetSerializableMembers (Type type);
static member GetSerializableMembers : Type -> System.Reflection.MemberInfo[]

Parámetros

type
Type

Tipo que se va a serializar.The type being serialized.

Devoluciones

Matriz de tipo MemberInfo de miembros no transitorios y no estáticos.An array of type MemberInfo of the non-transient, non-static members.

Atributos

Excepciones

El parámetro type es null.The type parameter is null.

El llamador no dispone del permiso requerido.The caller does not have the required permission.

Ejemplos

En el ejemplo siguiente se GetSerializableMembers llama al método desde una ISerializable.GetObjectData implementación de método.The following example calls the GetSerializableMembers method from an implementation of ISerializable.GetObjectData method.

public:
    [SecurityPermission(SecurityAction::Demand, SerializationFormatter = true)]
    virtual void GetObjectData(SerializationInfo^ info, StreamingContext context)
    {
        // Serialize the desired values for this class.
        info->AddValue("title", title);

        // Get the set of serializable members for the class and base classes.
        Type^ thisType = this->GetType();
        array<MemberInfo^>^ serializableMembers =
            FormatterServices::GetSerializableMembers(thisType, context);

        // Serialize the base class's fields to the info object.
        for each (MemberInfo^ serializableMember in serializableMembers)
        {
            // Do not serialize fields for this class.
            if (serializableMember->DeclaringType != thisType)
            {
                // Skip this field if it is marked NonSerialized.
                if (!(Attribute::IsDefined(serializableMember,
                    NonSerializedAttribute::typeid)))
                {
                    // Get the value of this field and add it to the
                    // SerializationInfo object.
                    info->AddValue(serializableMember->Name,
                        ((FieldInfo^)serializableMember)->GetValue(this));
                }
            }
        }

        // Call the method below to see the contents of the
        // SerializationInfo object.
        DisplaySerializationInfo(info);
    }
[SecurityPermission(SecurityAction.Demand, SerializationFormatter = true)]
public void GetObjectData(SerializationInfo info, StreamingContext context)
{

    // Serialize the desired values for this class.
    info.AddValue("title", title);

    // Get the set of serializable members for the class and base classes.
    Type thisType = this.GetType();
    MemberInfo[] mi = FormatterServices.GetSerializableMembers(thisType, context);

    // Serialize the base class's fields to the info object.
    for (Int32 i = 0; i < mi.Length; i++)
    {
        // Do not serialize fields for this class.
        if (mi[i].DeclaringType == thisType) continue;

        // Skip this field if it is marked NonSerialized.
        if (Attribute.IsDefined(mi[i], typeof(NonSerializedAttribute))) continue;
     
        // Get the value of this field and add it to the SerializationInfo object.
        info.AddValue(mi[i].Name, ((FieldInfo) mi[i]).GetValue(this));
    }

    // Call the method below to see the contents of the SerializationInfo object.
    DisplaySerializationInfo(info);
}

Comentarios

Por lo general, los miembros serializables de una clase son miembros no transitorios y no estáticos, como campos y propiedades.Generally, the serializable members of a class are non-transient, non-static members such as fields and properties. Para que se incluyan, las propiedades deben tener un captador y un establecedor.To be included, properties must have both a getter and a setter. Una clase que implementa la ISerializable interfaz o tiene un suplente de serialización no tiene que serializar todos estos miembros o puede serializar miembros adicionales.A class that implements the ISerializable interface or has a serialization surrogate does not have to serialize all these members, or can serialize additional members.

Dado que GetSerializableMembers el método llama Type.GetFields al método, no devuelve los campos en un orden determinado, como el orden alfabético o de declaración.Because the GetSerializableMembers method calls the Type.GetFields method, it does not return fields in a particular order, such as alphabetical or declaration order. El código no debe depender del orden en el que se devuelven los campos.Your code must not depend on the order in which fields are returned.

Seguridad

SecurityPermission
Permite proporcionar servicios de serialización.For providing serialization services. Enumeración asociada SerializationFormatter: LinkDemand,.Associated enumeration: SerializationFormatter, LinkDemand.

Consulte también:

GetSerializableMembers(Type, StreamingContext)

Obtiene todos los miembros serializables para una clase del Type especificado y en el StreamingContext proporcionado.Gets all the serializable members for a class of the specified Type and in the provided StreamingContext.

public:
 static cli::array <System::Reflection::MemberInfo ^> ^ GetSerializableMembers(Type ^ type, System::Runtime::Serialization::StreamingContext context);
[System.Security.SecurityCritical]
public static System.Reflection.MemberInfo[] GetSerializableMembers (Type type, System.Runtime.Serialization.StreamingContext context);
static member GetSerializableMembers : Type * System.Runtime.Serialization.StreamingContext -> System.Reflection.MemberInfo[]

Parámetros

type
Type

Tipo que se va a serializar o a clonar.The type being serialized or cloned.

context
StreamingContext

Contexto donde se produce la serialización.The context where the serialization occurs.

Devoluciones

Matriz de tipo MemberInfo de miembros no transitorios y no estáticos.An array of type MemberInfo of the non-transient, non-static members.

Atributos

Excepciones

El parámetro type es null.The type parameter is null.

El llamador no dispone del permiso requerido.The caller does not have the required permission.

Comentarios

Por lo general, los miembros serializables de una clase son miembros no transitorios y no estáticos, como campos y propiedades.Generally, the serializable members of a class are non-transient, non-static members such as fields and properties. Para que se incluyan, las propiedades deben tener un captador y un establecedor.To be included, properties must have both a getter and a setter. Una clase que implementa ISerializable o tiene un suplente de serialización no tiene que serializar todos estos miembros o puede serializar miembros adicionales.A class that implements ISerializable or has a serialization surrogate does not have to serialize all these members, or can serialize additional members.

Si context incluye el StreamingContextStates.Clone valor de enumeración, los campos transitorios también MemberInfo se incluyen en la matriz devuelta por este método.If context includes the StreamingContextStates.Clone enumeration value, transient fields are also included in the MemberInfo array returned by this method.

Dado que GetSerializableMembers el método llama Type.GetFields al método, no devuelve los campos en un orden determinado, como el orden alfabético o de declaración.Because the GetSerializableMembers method calls the Type.GetFields method, it does not return fields in a particular order, such as alphabetical or declaration order. El código no debe depender del orden en el que se devuelven los campos.Your code must not depend on the order in which fields are returned.

Seguridad

SecurityPermission
Permite proporcionar servicios de serialización.For providing serialization services. Enumeración asociada SerializationFormatter: LinkDemand,.Associated enumeration: SerializationFormatter, LinkDemand.

Consulte también:

Se aplica a