FormatterServices.GetSerializableMembers Metoda

Definicja

Zwraca wszystkie możliwe do serializacji elementy członkowskie dla określonej klasy.Returns all the serializable members for a particular class.

Przeciążenia

GetSerializableMembers(Type)

Pobiera wszystkie możliwe do serializacji elementy członkowskie dla określonej klasy Type .Gets all the serializable members for a class of the specified Type.

GetSerializableMembers(Type, StreamingContext)

Pobiera wszystkie możliwe do serializacji elementy członkowskie dla klasy określonej Type i w podanej wartości StreamingContext .Gets all the serializable members for a class of the specified Type and in the provided StreamingContext.

GetSerializableMembers(Type)

Pobiera wszystkie możliwe do serializacji elementy członkowskie dla określonej klasy Type .Gets all the serializable members for a class of the specified Type.

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

Parametry

type
Type

Typ, który jest serializowany.The type being serialized.

Zwraca

MemberInfo[]

Tablica typu MemberInfo nieprzejściowych, niestatycznych elementów członkowskich.An array of type MemberInfo of the non-transient, non-static members.

Atrybuty

Wyjątki

typeParametr ma wartość null .The type parameter is null.

Obiekt wywołujący nie posiada wymaganych uprawnień.The caller does not have the required permission.

Przykłady

Poniższy przykład wywołuje GetSerializableMembers metodę z implementacji ISerializable.GetObjectData metody.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);
}

Uwagi

Ogólnie rzecz biorąc elementy członkowskie klasy są nieprzejściowymi, niestatycznymi składowymi, takimi jak pola i właściwości.Generally, the serializable members of a class are non-transient, non-static members such as fields and properties. Aby można było uwzględnić właściwości metody pobierającej i ustawiającej.To be included, properties must have both a getter and a setter. Klasa implementująca ISerializable interfejs lub mająca Surogat serializacji nie musi serializować wszystkich tych elementów członkowskich lub może serializować dodatkowych elementów członkowskich.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.

Ponieważ GetSerializableMembers Metoda wywołuje Type.GetFields metodę, nie zwraca pól w określonej kolejności, takich jak kolejność alfabetyczna lub Deklaracja.Because the GetSerializableMembers method calls the Type.GetFields method, it does not return fields in a particular order, such as alphabetical or declaration order. Kod nie może zależeć od kolejności, w której pola są zwracane.Your code must not depend on the order in which fields are returned.

Zobacz też

Dotyczy

GetSerializableMembers(Type, StreamingContext)

Pobiera wszystkie możliwe do serializacji elementy członkowskie dla klasy określonej Type i w podanej wartości StreamingContext .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);
public static 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[]
[<System.Security.SecurityCritical>]
static member GetSerializableMembers : Type * System.Runtime.Serialization.StreamingContext -> System.Reflection.MemberInfo[]
Public Shared Function GetSerializableMembers (type As Type, context As StreamingContext) As MemberInfo()

Parametry

type
Type

Typ, który jest serializowany lub sklonowany.The type being serialized or cloned.

context
StreamingContext

Kontekst, w którym występuje Serializacja.The context where the serialization occurs.

Zwraca

MemberInfo[]

Tablica typu MemberInfo nieprzejściowych, niestatycznych elementów członkowskich.An array of type MemberInfo of the non-transient, non-static members.

Atrybuty

Wyjątki

typeParametr ma wartość null .The type parameter is null.

Obiekt wywołujący nie posiada wymaganych uprawnień.The caller does not have the required permission.

Uwagi

Ogólnie rzecz biorąc elementy członkowskie klasy są nieprzejściowymi, niestatycznymi składowymi, takimi jak pola i właściwości.Generally, the serializable members of a class are non-transient, non-static members such as fields and properties. Aby można było uwzględnić właściwości metody pobierającej i ustawiającej.To be included, properties must have both a getter and a setter. Klasa implementująca ISerializable lub mająca Surogat serializacji nie musi serializować wszystkich tych elementów członkowskich lub może serializować dodatkowych elementów członkowskich.A class that implements ISerializable or has a serialization surrogate does not have to serialize all these members, or can serialize additional members.

Jeśli context zawiera StreamingContextStates.Clone wartość wyliczenia, pola przejściowe są również uwzględniane w MemberInfo tablicy zwracanej przez tę metodę.If context includes the StreamingContextStates.Clone enumeration value, transient fields are also included in the MemberInfo array returned by this method.

Ponieważ GetSerializableMembers Metoda wywołuje Type.GetFields metodę, nie zwraca pól w określonej kolejności, takich jak kolejność alfabetyczna lub Deklaracja.Because the GetSerializableMembers method calls the Type.GetFields method, it does not return fields in a particular order, such as alphabetical or declaration order. Kod nie może zależeć od kolejności, w której pola są zwracane.Your code must not depend on the order in which fields are returned.

Zobacz też

Dotyczy