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

適用於