Sdílet prostřednictvím


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 DataContractResolver. 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áv. Další informace najdete v tématu Zabezpečení.

Upozornění

Používejte 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()

Získá aktuální Type instanci.

(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řepište tuto metodu pro mapování zadaného xsi:type názvu a oboru 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 kontraktu dat na xsi:type název a obor názvů během serializace.

Platí pro