Compartir a través de


DataContractResolver Clase

Definición

Proporciona un mecanismo para asignar dinámicamente los tipos entre las representaciones xsi:type durante la serialización y la deserialización.

public ref class DataContractResolver abstract
public abstract class DataContractResolver
type DataContractResolver = class
Public MustInherit Class DataContractResolver
Herencia
DataContractResolver
Derivado

Ejemplos

El ejemplo siguiente muestra cómo derivar una clase de DataContractResolver. Para obtener un ejemplo de trabajo, consulte 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;
    }
}

Comentarios

Los desarrolladores deben tener cuidado sobre qué datos se envían a través de la conexión. Puede usar la seguridad del transporte o del mensaje para proteger esos datos. Para obtener más información, consulte Seguridad.

Advertencia

DataContractResolver Use solo si está completamente seguro de qué información se está serializando. Los tipos malintencionados pueden provocar un comportamiento inesperado.

Constructores

DataContractResolver()

Inicializa una nueva instancia de la clase DataContractResolver.

Métodos

Equals(Object)

Determina si el objeto especificado es igual que el objeto actual.

(Heredado de Object)
GetHashCode()

Sirve como la función hash predeterminada.

(Heredado de Object)
GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
MemberwiseClone()

Crea una copia superficial del Object actual.

(Heredado de Object)
ResolveName(String, String, Type, DataContractResolver)

Invalide este método para asignar el nombre y el espacio de nombres xsi:type especificados a un tipo de contrato de datos durante la deserialización.

ToString()

Devuelve una cadena que representa el objeto actual.

(Heredado de Object)
TryResolveType(Type, Type, DataContractResolver, XmlDictionaryString, XmlDictionaryString)

Invalide este método para asignar un tipo de contrato de datos a un nombre y un espacio de nombres xsi:type durante la serialización.

Se aplica a