Bereitstellen der Funktionen für NetDataContractSerializer mit DataContractSerializer und DataContractResolverUsing DataContractSerializer and DataContractResolver to Provide the Functionality of NetDataContractSerializer

In diesem Beispiel wird veranschaulicht, wie die Verwendung von DataContractSerializer mit einem entsprechenden DataContractResolver die gleiche Funktionalität wie der NetDataContractSerializer bereitstellt.This sample demonstrates how the use of DataContractSerializer with an appropriate DataContractResolver provides the same functionality as NetDataContractSerializer. In diesem Beispiel wird gezeigt, wie der entsprechende DataContractResolver erstellt und dem DataContractSerializer hinzugefügt wird.This sample shows how to create the appropriate DataContractResolver and how to add it to the DataContractSerializer.

BeispieldetailsSample details

NetDataContractSerializer unterscheidet sich von DataContractSerializer in einem wichtigen Punkt: NetDataContractSerializer enthält im Gegensatz zu DataContractSerializer CLR-Typinformationen im serialisierten XML.NetDataContractSerializer differs from DataContractSerializer in one important way: NetDataContractSerializer includes CLR type information in the serialized XML, whereas DataContractSerializer does not. 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.Therefore, NetDataContractSerializer can be used only if both the serializing and deserializing ends share the same CLR types. Es wird jedoch empfohlen, DataContractSerializer zu verwenden, da er eine höhere Leistung bietet als NetDataContractSerializer.However, it is recommended to use DataContractSerializer because its performance is better than NetDataContractSerializer. Sie können die Informationen ändern, die in DataContractSerializer serialisiert sind, indem Sie einen DataContractResolver hinzuzufügen.You can change the information that is serialized in DataContractSerializer by adding a DataContractResolver to it.

Dieses Beispiel besteht aus zwei Projekten.This sample consists of two projects. Das erste Projekt verwendet NetDataContractSerializer für das Serialisieren eines Objekts.The first project uses NetDataContractSerializer to serialize an object. Das zweite Projekt verwendet DataContractSerializer mit einem DataContractResolver, um die gleiche Funktionalität wie das erste Projekt bereitzustellen.The second project uses DataContractSerializer with a DataContractResolver to provide the same functionality as the first project.

Im folgenden Codebeispiel wird die Implementierung von einem benutzerdefinierten DataContractResolver mit dem Namen MyDataContractResolver veranschaulicht, der dem DataContractSerializer im DCSwithDCR-Projekt hinzugefügt wird.The following code example shows the implementation of a custom DataContractResolver named MyDataContractResolver that is added to the DataContractSerializer in the DCSwithDCR project.

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 BeispielTo use this sample

  1. Öffnen Sie mit Visual Studio 2012Visual Studio 2012 die Projektmappendatei DCRSample.sln.Using Visual Studio 2012Visual Studio 2012, open the DCRSample.sln solution file.

  2. Die Projektmappendatei Maustaste und wählen Sie Eigenschaften.Right-click the solution file and choose Properties.

  3. In der -Eigenschaftenseiten Dialogfeld unter allgemeine Eigenschaften, StartprojektOption mehrere Startprojekte:.In the Solution Property Pages dialog, under Common Properties, Startup Project, select Multiple startup projects:.

  4. Neben den DCSwithDCR -Projekt, wählen starten aus der Aktion Dropdownliste.Next to the DCSwithDCR project, select Start from the Action dropdown.

  5. Neben den NetDCS -Projekt, wählen starten aus der Aktion Dropdownliste.Next to the NetDCS project, select Start from the Action dropdown.

  6. Klicken Sie auf OK um das Dialogfeld zu schließen.Click OK to close the dialog.

  7. Drücken Sie STRG+UMSCHALT+B, um die Projektmappe zu erstellen.To build the solution, press CTRL+SHIFT+B.

  8. Drücken Sie STRG+F5, um die Projektmappe auszuführen.To run the solution, press CTRL+F5.

Wichtig

Die Beispiele sind möglicherweise bereits auf dem Computer installiert.The samples may already be installed on your machine. Suchen Sie nach dem folgenden Verzeichnis (Standardverzeichnis), bevor Sie fortfahren.Check for the following (default) directory before continuing.

<InstallDrive>:\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)Windows Communication Foundation (WCF) - und WFWF -Beispiele herunterzuladen.If this directory does not exist, go to Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 to download all Windows Communication Foundation (WCF)Windows Communication Foundation (WCF) and WFWF samples. Dieses Beispiel befindet sich im folgenden Verzeichnis.This sample is located in the following directory.

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

Siehe auchSee Also