DataContractResolver Класс

Определение

Предоставляет механизм динамического сопоставления типов с xsi:type представлениями во время сериализации и десериализации.

public ref class DataContractResolver abstract
public abstract class DataContractResolver
type DataContractResolver = class
Public MustInherit Class DataContractResolver
Наследование
DataContractResolver
Производный

Примеры

В следующем примере показано, как наследовать класс из DataContractResolver. Рабочий пример см. в разделе 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;
    }
}

Комментарии

Разработчики должны быть осторожны с тем, какие данные отправляются по проводу. Для защиты данных можно использовать безопасность транспорта или сообщений. Дополнительные сведения см. в разделе Безопасность.

Предупреждение

Используйте DataContractResolver только в том случае, если вы полностью уверены в сериализации информации. Вредоносные типы могут вызвать непредвиденное поведение.

Конструкторы

Имя Описание
DataContractResolver()

Инициализирует новый экземпляр класса DataContractResolver.

Методы

Имя Описание
Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetType()

Возвращает Type текущего экземпляра.

(Унаследовано от Object)
MemberwiseClone()

Создает неглубокую копию текущей Object.

(Унаследовано от Object)
ResolveName(String, String, Type, DataContractResolver)

Переопределите этот метод, чтобы сопоставить указанное xsi:type имя и пространство имен с типом контракта данных во время десериализации.

ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)
TryResolveType(Type, Type, DataContractResolver, XmlDictionaryString, XmlDictionaryString)

Переопределите этот метод, чтобы сопоставить тип контракта данных с xsi:type именем и пространством имен во время сериализации.

Применяется к