Serialisieren in Json mit Programmierung auf Nachrichtenebene
WCF unterstützt die Serialisierung von Daten im JSON-Format. In diesem Thema wird beschrieben, wie WCF angewiesen wird, Typen mit dem DataContractJsonSerializer zu serialisieren.
Programmieren typisierter Nachrichten
Der DataContractJsonSerializer wird verwendet, wenn das WebGetAttribute oder WebInvokeAttribute auf einen Dienstvorgang angewendet wird. Beide Attribute ermöglichen es Ihnen, das RequestFormat
und das ResponseFormat
anzugeben. So verwenden Sie JSON für Anforderungen und Antworten. Legen Sie beide auf fest WebMessageFormat.Json
. JSON erfordert die Verwendung der WebHttpBinding, die automatisch das WebHttpBehavior konfiguriert. Weitere Informationen finden Sie unter Serialisierung und Deserialisierung. Weitere Informationen zu JSON und WCF finden Sie unter Service Station – Eine Einführung in RESTful Services mit WCF.
Wichtig
JSON erfordert die Verwendung von WebHttpBinding und WebHttpBehavior, die keine SOAP-Kommunikation unterstützen. Dienste, die mit der WebHttpBinding kommunizieren, bieten keine Unterstützung für das Verfügbarmachen von Dienstmetadaten, sodass Sie Dienstverweis hinzufügen in Visual Studio und das Befehlszeilentool svcutil nicht verwenden können, um einen clientseitigen Proxy zu generieren. Weitere Informationen zum programmgesteuerten Aufrufen von Diensten, die WebHttpBinding verwenden, finden Sie unter Verwenden von REST-Diensten mit WCF.
Programmieren nicht typisierter Nachrichten
Beim direkten Arbeiten mit nicht typisierten Message-Objekten müssen Sie die Eigenschaften für die nicht typisierte Nachricht explizit festlegen, um sie im JSON-Format zu serialisieren. Der folgende Codeausschnitt veranschaulicht, wie Sie dabei vorgehen müssen:
Message response = Message.CreateMessage(
MessageVersion.None, // No SOAP message version
"*", // SOAP action, ignored since this is JSON
"Response string: JSON format specified", // Message body
new DataContractJsonSerializer(typeof(string))); // Specify DataContractJsonSerializer
response.Properties.Add( WebBodyFormatMessageProperty.Name,
new WebBodyFormatMessageProperty(WebContentFormat.Json)); // Use JSON format