DataContractResolver Třída

Definice

Poskytuje mechanismus pro dynamické mapování typů na a z xsi:type reprezentací během serializace a deserializace.

public ref class DataContractResolver abstract
public abstract class DataContractResolver
type DataContractResolver = class
Public MustInherit Class DataContractResolver
Dědičnost
DataContractResolver
Odvozené

Příklady

Následující příklad ukazuje, jak odvodit třídu z DataContractResolvertřídy . Funkční ukázku najdete v tématu 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;
    }
}

Poznámky

Vývojáři by měli být opatrní ohledně toho, jaká data se odesílají prostřednictvím přenosu. K zabezpečení dat můžete použít zabezpečení přenosu nebo zprávy. Další informace najdete v tématu Zabezpečení.

Upozornění

Použijte DataContractResolver pouze v případě, že jste si zcela jistí, jaké informace jsou serializovány. Škodlivé typy můžou způsobit neočekávané chování.

Konstruktory

DataContractResolver()

Inicializuje novou instanci DataContractResolver třídy .

Metody

Equals(Object)

Určí, zda se zadaný objekt rovná aktuálnímu objektu.

(Zděděno od Object)
GetHashCode()

Slouží jako výchozí hashovací funkce.

(Zděděno od Object)
GetType()

Type Získá z aktuální instance.

(Zděděno od Object)
MemberwiseClone()

Vytvoří mělkou kopii aktuálního Objectsouboru .

(Zděděno od Object)
ResolveName(String, String, Type, DataContractResolver)

Přepsat tuto metodu mapovat zadaný xsi:type název a obor názvů na typ kontraktu dat během deserializace.

ToString()

Vrátí řetězec, který představuje aktuální objekt.

(Zděděno od Object)
TryResolveType(Type, Type, DataContractResolver, XmlDictionaryString, XmlDictionaryString)

Přepsat tuto metodu mapovat typ datového kontraktu xsi:type na název a obor názvů během serializace.

Platí pro