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) |
Переопределение этого метода, чтобы во время десериализации сопоставить указанное имя |
ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |
TryResolveType(Type, Type, DataContractResolver, XmlDictionaryString, XmlDictionaryString) |
Переопределение этого метода, чтобы во время сериализации сопоставить тип контракта данных с именем |