Bereitstellen der Funktionen für NetDataContractSerializer mit DataContractSerializer und DataContractResolver

In diesem Beispiel wird veranschaulicht, wie die Verwendung von DataContractSerializer mit einem entsprechenden DataContractResolver die gleiche Funktionalität wie der NetDataContractSerializer bereitstellt.In diesem Beispiel wird gezeigt, wie der entsprechende DataContractResolver erstellt und dem DataContractSerializer hinzugefügt wird.

Beispieldetails

NetDataContractSerializer unterscheidet sich von DataContractSerializer in einem wichtigen Punkt: NetDataContractSerializer enthält im Gegensatz zu DataContractSerializer CLR-Typinformationen im serialisierten XML.NetDataContractSerializer kann daher nur verwendet werden, wenn sowohl der Endpunkt für die Serialisierung als auch der Endpunkt für die Deserialisierung den gleichen CLR-Typ aufweisen.Es wird jedoch empfohlen, DataContractSerializer zu verwenden, da er eine höhere Leistung bietet als NetDataContractSerializer.Sie können die Informationen ändern, die in DataContractSerializer serialisiert sind, indem Sie einen DataContractResolver hinzuzufügen.

Dieses Beispiel besteht aus zwei Projekten.Das erste Projekt verwendet NetDataContractSerializer für das Serialisieren eines Objekts.Das zweite Projekt verwendet DataContractSerializer mit einem DataContractResolver, um die gleiche Funktionalität wie das erste Projekt bereitzustellen.

Im folgenden Codebeispiel wird die Implementierung von einem benutzerdefinierten DataContractResolver mit dem Namen MyDataContractResolver veranschaulicht, 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);  
        if (type == 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

  1. Öffnen Sie mit Visual Studio 2012 die Projektmappendatei DCRSample.sln.

  2. Klicken Sie mit der rechten Maustaste auf die Projektmappendatei, und wählen Sie Eigenschaften.

  3. Wählen Sie im Dialogfeld Eigenschaftenseiten der Projektmappe unter Allgemeine Eigenschaften, Startprojekt die Option Mehrere Startprojekte aus.

  4. Wählen Sie neben dem Projekt DCSwithDCR aus der Dropdownliste Aktion die Option Start aus.

  5. Wählen Sie neben dem Projekt NetDCS aus der Dropdownliste Aktion die Option Start aus.

  6. Klicken Sie auf OK, um das Dialogfeld zu schließen.

  7. Drücken Sie STRG+UMSCHALT+B, um die Projektmappe zu erstellen.

  8. Drücken Sie STRG+F5, um die Projektmappe auszuführen.

Wichtig

Die Beispiele sind möglicherweise bereits auf dem Computer installiert.Suchen Sie nach dem folgenden Verzeichnis (Standardverzeichnis), bevor Sie fortfahren.

<Installationslaufwerk>:\WF_WCF_Samples

Wenn dieses Verzeichnis nicht vorhanden ist, rufen Sie Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 auf, um alle Windows Communication Foundation (WCF)- und WF-Beispiele herunterzuladen.Dieses Beispiel befindet sich im folgenden Verzeichnis.

<InstallDrive>:\WF_WCF_Samples\WCF\Basic\Contract\Data\NetDcSasDcSwithDCR

Siehe auch