Udostępnij za pośrednictwem


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 DataContractResolverklasy . Aby uzyskać przykład pracy, 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 za pośrednictwem przewodu. Aby zabezpieczyć te dane, można użyć zabezpieczeń transportu lub komunikatów. Aby uzyskać więcej informacji, zobacz Zabezpieczenia.

Ostrzeżenie

Użyj 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 bieżące wystąpienie.

(Odziedziczone po Object)
MemberwiseClone()

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

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

Zastąpi 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