İngilizce dilinde oku

Aracılığıyla paylaş


DataContractResolver Sınıf

Tanım

Serileştirme ve seri durumdan xsi:type çıkarma sırasında gösterimlere türleri dinamik olarak eşlemek için bir mekanizma sağlar.

C#
public abstract class DataContractResolver
Devralma
DataContractResolver
Türetilmiş

Örnekler

Aşağıdaki örnek, öğesinden DataContractResolverbir sınıfın nasıl türetilmiş olduğunu gösterir. Çalışan bir örnek için bkz. DataContractResolver.

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

Açıklamalar

Geliştiriciler, kablo üzerinden hangi verilerin gönderildiği konusunda dikkatli olmalıdır. Bu verilerin güvenliğini sağlamak için aktarım veya ileti güvenliğini kullanabilirsiniz. Daha fazla bilgi için bkz . Güvenlik.

Uyarı

Yalnızca hangi bilgilerin seri hale getirildiğinden tamamen eminseniz kullanın DataContractResolver . Kötü amaçlı türler beklenmeyen davranışlara neden olabilir.

Oluşturucular

DataContractResolver()

DataContractResolver sınıfının yeni bir örneğini başlatır.

Yöntemler

Equals(Object)

Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler.

(Devralındığı yer: Object)
GetHashCode()

Varsayılan karma işlevi işlevi görür.

(Devralındığı yer: Object)
GetType()

Type Geçerli örneğini alır.

(Devralındığı yer: Object)
MemberwiseClone()

Geçerli Objectöğesinin sığ bir kopyasını oluşturur.

(Devralındığı yer: Object)
ResolveName(String, String, Type, DataContractResolver)

Seri durumdan çıkarma sırasında belirtilen xsi:type adı ve ad alanını bir veri sözleşmesi türüyle eşlemek için bu yöntemi geçersiz kılın.

ToString()

Geçerli nesneyi temsil eden dizeyi döndürür.

(Devralındığı yer: Object)
TryResolveType(Type, Type, DataContractResolver, XmlDictionaryString, XmlDictionaryString)

Serileştirme sırasında bir veri sözleşmesi türünü bir xsi:type ad ve ad alanıyla eşlemek için bu yöntemi geçersiz kılın.

Şunlara uygulanır

Ürün Sürümler
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1
UWP 10.0