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;
    }
}

備註

開發者應該謹慎處理透過有線傳送的資料。 你可以利用傳輸安全或訊息安全來保護這些資料。 如需詳細資訊,請參閱 安全性

Warning

只有在你完全確定序列化的資訊是什麼時才使用 DataContractResolver 。 惡意類型可能會造成意想不到的行為。

建構函式

名稱 Description
DataContractResolver()

初始化 DataContractResolver 類別的新執行個體。

方法

名稱 Description
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 與命名空間。

適用於