KnownTypeAttribute Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Gibt Typen an, die vom DataContractSerializer beim Serialisieren oder Deserialisieren eines bestimmten Typs erkannt werden sollen.
public ref class KnownTypeAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Struct, AllowMultiple=true, Inherited=true)]
public sealed class KnownTypeAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Struct, AllowMultiple=true, Inherited=true)>]
type KnownTypeAttribute = class
inherit Attribute
Public NotInheritable Class KnownTypeAttribute
Inherits Attribute
- Vererbung
- Attribute
Beispiele
Im folgenden Beispiel werden ein Typ mit dem Namen Person
und ein Typ mit dem Namen IDInformation
veranschaulicht, die bei der Serialisierung oder Deserialisierung des Person
-Typs erkannt werden sollen.
using System;
using System.Collections.Generic;
using System.Collections;
using System.Text;
using System.IO;
using System.Runtime.Serialization;
namespace KnownTypeAttributeExample
{
class Program
{
static void Main(string[] args)
{
try
{
Serialize("KnownTypeAttributeExample.xml");
Deserialize("KnownTypeAttributeExample.xml");
// Run this twice. The second time, comment out the
// Serialize call and comment out the
// KnownTypeAttribute on the Person class. The
// deserialization will then fail.
}
catch (SerializationException exc)
{
Console.WriteLine("{0}: {1}", exc.Message,
exc.StackTrace);
}
finally
{
Console.WriteLine("Press Enter to exit...");
Console.ReadLine();
}
}
public static void Serialize(string path)
{
Person p = new Person();
p.Miscellaneous.Add(DateTime.Now, "Hello");
p.Miscellaneous.Add(DateTime.Now.AddSeconds(1), "World");
IDInformation w = new IDInformation();
w.ID = "1111 00000";
p.Miscellaneous.Add(DateTime.Now.AddSeconds(2), w);
DataContractSerializer ser =
new DataContractSerializer(typeof(Person));
FileStream fs = new FileStream(path, FileMode.Create);
using (fs)
{
ser.WriteObject(fs, p);
}
}
public static void Deserialize(string path)
{
DataContractSerializer ser =
new DataContractSerializer(typeof(Person));
FileStream fs = new FileStream(path, FileMode.Open);
using (fs)
{
Person p2 = (Person)ser.ReadObject(fs);
Console.WriteLine("Count {0}", p2.Miscellaneous.Count);
foreach (DictionaryEntry de in p2.Miscellaneous)
{
Console.WriteLine("Key {0} Value: {1}", de.Key,
de.Value);
if (de.Value.GetType() == typeof(IDInformation))
{
IDInformation www = (IDInformation)de.Value;
Console.WriteLine(
"\t Found ID Information. ID: {0} \n", www.ID);
}
}
}
}
// Apply the KnownTypeAttribute to the class that
// includes a member that returns a Hashtable.
[KnownType(typeof(IDInformation))]
[DataContract]
public class Person : IExtensibleDataObject
{
private ExtensionDataObject ExtensionDataObjectValue;
public ExtensionDataObject ExtensionData
{
get { return ExtensionDataObjectValue; }
set { ExtensionDataObjectValue = value; }
}
private Hashtable MiscellaneousValue = new Hashtable();
[DataMember]
public Hashtable Miscellaneous
{
get { return MiscellaneousValue; }
set { MiscellaneousValue = value; }
}
}
[DataContract]
public class IDInformation : IExtensibleDataObject
{
private ExtensionDataObject ExtensionDataValue;
public ExtensionDataObject ExtensionData
{
get { return ExtensionDataValue; }
set { ExtensionDataValue = value; }
}
[DataMember]
public string ID;
}
}
}
Imports System.Collections.Generic
Imports System.Collections
Imports System.Text
Imports System.IO
Imports System.Runtime.Serialization
Imports System.Xml
Class Program
Shared Sub Main(ByVal args() As String)
Try
Serialize("KnownTypeAttributeExample.xml")
Deserialize("KnownTypeAttributeExample.xml")
' Run this twice. The second time, comment out the
' Serialize call and comment out the
' KnownTypeAttribute on the Person class. The
' deserialization will then fail.
Catch exc As SerializationException
Console.WriteLine("{0}: {1}", exc.Message, exc.StackTrace)
Finally
Console.WriteLine("Press Enter to exit...")
Console.ReadLine()
End Try
End Sub
Public Shared Sub Serialize(ByVal path As String)
Dim p As New Person()
p.Miscellaneous.Add(DateTime.Now, "Hello")
p.Miscellaneous.Add(DateTime.Now.AddSeconds(1), "World")
Dim w As New IDInformation()
w.ID = "1111 00000"
p.Miscellaneous.Add(DateTime.Now.AddSeconds(2), w)
Dim ser As New DataContractserializer(GetType(Person))
Using fs As New FileStream(path, FileMode.OpenOrCreate)
ser.WriteObject(fs, p)
End Using
End Sub
Public Shared Sub Deserialize(ByVal path As String)
Dim ser As New DataContractserializer(GetType(Person))
Using fs As New FileStream(path, FileMode.OpenOrCreate)
Dim p2 As Person = ser.ReadObject(fs)
Console.WriteLine("Count {0}", p2.Miscellaneous.Count)
For Each de As DictionaryEntry In p2.Miscellaneous
Console.WriteLine("Key {0} Value: {1}", de.Key, _
de.Value)
If TypeOf (de.Value) Is IDInformation Then
Dim www As IDInformation = de.Value
Console.WriteLine( _
"Found ID Information. ID: {0}", www.ID)
End If
Next
End Using
End Sub
' Apply the KnownTypeAttribute to the class that
' includes a member that returns a Hashtable.
<System.Runtime.Serialization.KnownType(GetType(IDInformation))> _
<DataContract()> _
Public Class Person
Implements IExtensibleDataObject
Private MiscellaneousValue As New Hashtable()
Private ExtensionDataObjectValue As ExtensionDataObject
Public Property ExtensionData() As ExtensionDataObject _
Implements IExtensibleDataObject.ExtensionData
Get
Return ExtensionDataObjectValue
End Get
Set(ByVal value As ExtensionDataObject)
ExtensionDataObjectValue = value
End Set
End Property
<DataMember()> _
Public Property Miscellaneous() As Hashtable
Get
Return MiscellaneousValue
End Get
Set(ByVal value As Hashtable)
MiscellaneousValue = value
End Set
End Property
End Class
<DataContract()> _
Public Class IDInformation
Implements IExtensibleDataObject
Private ExtensionDataObjectValue As ExtensionDataObject
Public Property ExtensionData() As ExtensionDataObject _
Implements IExtensibleDataObject.ExtensionData
Get
Return ExtensionDataObjectValue
End Get
Set(ByVal value As ExtensionDataObject)
ExtensionDataObjectValue = value
End Set
End Property
<DataMember()> _
Public ID As String
End Class
End Class
Hinweise
Wenden Sie das KnownTypeAttribute-Attribut auf einen Typ an, um dem DataContractSerializer die Typen anzuzeigen, die bei der Serialisierung oder Deserialisierung einer Instanz des Typs, auf den das Attribut angewendet wird, erkannt werden sollen. Dieses Attribut kann auch von anderen Serialisierungsprogrammen erkannt werden, die Datenverträge verstehen.
Hinweis
Sie können im Code das Wort KnownType
anstelle des längeren KnownTypeAttribute
verwenden.
Sie können entweder genau eine KnownTypeAttribute-Instanz mit der festgelegten MethodName-Eigenschaft oder eine oder mehrere KnownTypeAttribute-Instanzen mit der festgelegten Type -Eigenschaft anwenden.
Konstruktoren
KnownTypeAttribute(String) |
Initialisiert eine neue Instanz der KnownTypeAttribute-Klasse mit dem Namen einer Methode, die einen IEnumerable bekannter Typen zurückgibt. |
KnownTypeAttribute(Type) |
Initialisiert eine neue Instanz der KnownTypeAttribute-Klasse mit dem angegebenen Typ. |
Eigenschaften
MethodName |
Ruft den Namen einer Methode ab, die eine Liste von Typen zurückgibt, die bei der Serialisierung oder Deserialisierung erkannt werden sollen. |
Type |
Ruft den Typ ab, der bei der Serialisierung oder Deserialisierung vom DataContractSerializer erkannt werden soll. |
TypeId |
Ruft bei Implementierung in einer abgeleiteten Klasse einen eindeutigen Bezeichner für dieses Attribute ab. (Geerbt von Attribute) |
Methoden
Equals(Object) |
Gibt einen Wert zurück, der angibt, ob diese Instanz gleich einem angegebenen Objekt ist. (Geerbt von Attribute) |
GetHashCode() |
Gibt den Hashcode für diese Instanz zurück. (Geerbt von Attribute) |
GetType() |
Ruft den Type der aktuellen Instanz ab. (Geerbt von Object) |
IsDefaultAttribute() |
Gibt beim Überschreiben in einer abgeleiteten Klasse an, ob der Wert der Instanz der Standardwert für die abgeleitete Klasse ist. (Geerbt von Attribute) |
Match(Object) |
Beim Überschreiben in einer abgeleiteten Klasse wird ein Wert zurückgegeben, der angibt, ob diese Instanz einem bestimmten Objekt entspricht. (Geerbt von Attribute) |
MemberwiseClone() |
Erstellt eine flache Kopie des aktuellen Object. (Geerbt von Object) |
ToString() |
Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Geerbt von Object) |
Explizite Schnittstellenimplementierungen
_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) |
Ordnet eine Reihe von Namen einer entsprechenden Reihe von Dispatchbezeichnern zu. (Geerbt von Attribute) |
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) |
Ruft die Typinformationen für ein Objekt ab, mit deren Hilfe die Typinformationen für eine Schnittstelle abgerufen werden können. (Geerbt von Attribute) |
_Attribute.GetTypeInfoCount(UInt32) |
Ruft die Anzahl der Schnittstellen mit Typinformationen ab, die von einem Objekt bereitgestellt werden (0 oder 1). (Geerbt von Attribute) |
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) |
Stellt den Zugriff auf von einem Objekt verfügbar gemachte Eigenschaften und Methoden bereit. (Geerbt von Attribute) |