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 名称和命名空间。

适用于