DataContractResolver Klasa

Definicja

Zapewnia mechanizm dynamicznego mapowania typów do i z xsi:type reprezentacji podczas serializacji i deserializacji.

public ref class DataContractResolver abstract
public abstract class DataContractResolver
type DataContractResolver = class
Public MustInherit Class DataContractResolver
Dziedziczenie
DataContractResolver
Pochodne

Przykłady

W poniższym przykładzie pokazano, jak utworzyć klasę z klasy DataContractResolver. Aby zapoznać się z roboczym przykładem, zobacz DataContractResolver.

class MyDataContractResolver : DataContractResolver
{
    private Dictionary<string, XmlDictionaryString> dictionary = new Dictionary<string, XmlDictionaryString>();
    Assembly assembly;

    // Definition of the DataContractResolver
    public MyDataContractResolver(Assembly assembly)
    {
        this.assembly = assembly;
    }

    // Used at deserialization
    // Allows users to map xsi:type name to any Type
    public override Type ResolveName(string typeName, string typeNamespace, Type declaredType, DataContractResolver knownTypeResolver)
    {
        XmlDictionaryString tName;
        XmlDictionaryString tNamespace;
        if (dictionary.TryGetValue(typeName, out tName) && dictionary.TryGetValue(typeNamespace, out tNamespace))
        {
            return this.assembly.GetType(tNamespace.Value + "." + tName.Value);
        }
        else
        {
            return null;
        }
    }
    // Used at serialization
    // Maps any Type to a new xsi:type representation
    public override bool TryResolveType(Type type, Type declaredType, DataContractResolver knownTypeResolver, out XmlDictionaryString typeName, out XmlDictionaryString typeNamespace)
    {
        string name = type.Name;
        string namesp = type.Namespace;
        typeName = new XmlDictionaryString(XmlDictionary.Empty, name, 0);
        typeNamespace = new XmlDictionaryString(XmlDictionary.Empty, namesp, 0);
        if (!dictionary.ContainsKey(type.Name))
        {
            dictionary.Add(name, typeName);
        }
        if (!dictionary.ContainsKey(type.Namespace))
        {
            dictionary.Add(namesp, typeNamespace);
        }
        return true;
    }
}

Uwagi

Deweloperzy powinni uważać na to, jakie dane są wysyłane przez sieć. Aby zabezpieczyć te dane, można użyć zabezpieczeń transportu lub wiadomości. Aby uzyskać więcej informacji, zobacz Zabezpieczenia.

Ostrzeżenie

Używaj DataContractResolver tylko wtedy, gdy masz zupełnie pewność, jakie informacje są serializowane. Złośliwe typy mogą powodować nieoczekiwane zachowanie.

Konstruktory

DataContractResolver()

Inicjuje nowe wystąpienie klasy DataContractResolver.

Metody

Equals(Object)

Określa, czy dany obiekt jest taki sam, jak bieżący obiekt.

(Odziedziczone po Object)
GetHashCode()

Służy jako domyślna funkcja skrótu.

(Odziedziczone po Object)
GetType()

Type Pobiera wartość bieżącego wystąpienia.

(Odziedziczone po Object)
MemberwiseClone()

Tworzy płytkią kopię bieżącego Objectelementu .

(Odziedziczone po Object)
ResolveName(String, String, Type, DataContractResolver)

Zastąpij tę metodę, aby zamapować określoną xsi:type nazwę i przestrzeń nazw na typ kontraktu danych podczas deserializacji.

ToString()

Zwraca ciąg reprezentujący bieżący obiekt.

(Odziedziczone po Object)
TryResolveType(Type, Type, DataContractResolver, XmlDictionaryString, XmlDictionaryString)

Zastąpij tę metodę, aby zamapować typ kontraktu danych na xsi:type nazwę i przestrzeń nazw podczas serializacji.

Dotyczy