Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Das NetDcSasDcSwithDCR-Beispiel veranschaulicht, wie die Verwendung DataContractSerializer mit einer geeigneten DataContractResolver Funktion die gleiche Funktionalität bietet wie NetDataContractSerializer. In diesem Beispiel wird gezeigt, wie Sie die entsprechende DataContractResolver erstellen und zu DataContractSerializer hinzufügen.
Beispieldetails
NetDataContractSerializer unterscheidet sich von DataContractSerializer in einer wichtigen Weise: NetDataContractSerializer enthält CLR-Typinformationen in der serialisierten XML, während DataContractSerializer dies nicht tut. Daher kann NetDataContractSerializer nur verwendet werden, wenn sowohl die serialisierenden als auch die deserialisierenden Enden die gleichen CLR-Typen aufweisen. Es wird jedoch empfohlen, zu verwenden DataContractSerializer , da seine Leistung besser ist als NetDataContractSerializer. Sie können die Informationen, die in DataContractSerializer serialisiert werden, ändern, indem Sie DataContractResolver hinzufügen.
Dieses Beispiel besteht aus zwei Projekten. Das erste Projekt verwendet NetDataContractSerializer , um ein Objekt zu serialisieren. Das zweite Projekt verwendet DataContractSerializer und eine DataContractResolver, um die gleiche Funktionalität wie das erste Projekt bereitzustellen.
Das folgende Codebeispiel zeigt die Implementierung eines benutzerdefinierten DataContractResolver mit dem Namen MyDataContractResolver
, der dem DataContractSerializer im DCSwithDCR-Projekt hinzugefügt wird.
class MyDataContractResolver : DataContractResolver
{
private XmlDictionary dictionary = new XmlDictionary();
public MyDataContractResolver()
{
}
// Used at deserialization
// Allows users to map xsi:type name to any Type
public override Type ResolveName(string typeName, string typeNamespace, DataContractResolver knownTypeResolver)
{
Type type = knownTypeResolver.ResolveName(typeName, typeNamespace, null);
type ??= Type.GetType(typeName + ", " + typeNamespace);
return type;
}
// Used at serialization
// Maps any Type to a new xsi:type representation
public override void ResolveType(Type dataContractType, DataContractResolver knownTypeResolver, out XmlDictionaryString typeName, out XmlDictionaryString typeNamespace)
{
knownTypeResolver.ResolveType(dataContractType, null, out typeName, out typeNamespace);
if (typeName == null || typeNamespace == null)
{
XmlDictionary dictionary = new XmlDictionary();
typeName = dictionary.Add(dataContractType.FullName);
typeNamespace = dictionary.Add(dataContractType.Assembly.FullName);
}
}
}
So verwenden Sie dieses Beispiel
Öffnen Sie mit Visual Studio die DCRSample.sln Projektmappendatei.
Klicken Sie mit der rechten Maustaste auf die Lösungsdatei, und wählen Sie "Eigenschaften" aus.
Wählen Sie im Dialogfeld Eigenschaftenseiten der Projektmappe unter Allgemeine Eigenschaften, Startprojekt die Option Mehrere Startprojekte aus.
Wählen Sie neben dem DCSwithDCR-Projekt " Start " aus der Dropdownliste "Aktion " aus.
Wählen Sie neben dem NetDCS-Projekt " Start " aus der Dropdownliste "Aktion " aus.
Klicken Sie auf OK , um das Dialogfeld zu schließen.
Um die Lösung zu erstellen, drücken Sie Strg+Umschalt+B.
Um die Lösung auszuführen, drücken Sie STRG+F5.