2009-07-16 5 views
5

Ich habe einen vorhandenen Webdienst, der XML-Antworten zurückgibt, und ich möchte einige neue Methoden hinzufügen, die JSON zurückgeben. Muss ich einen separaten Webdienst erstellen, der in JSON zurückgegeben wird, oder kann ich einen Mix erstellen?JSON AND XML-Format von einem .NET 3.5 WCF-Webdienst (REST) ​​zurückgeben

Wenn ich das ResponseFormat = WebMessageFormat.JSON verwende Ich muss den Dienst mit [DataContractFormat] kommentiert haben, aber ich kann nicht scheinen, und [XmlSerializerFormat], die für das xml-Antwortformat erforderlich ist.

Antwort

3

Ich sehe nicht, warum das nicht möglich ist. Sie kennzeichnen den Dienst mit dem Attribut [ServiceContract] (nicht DataContractFormat). Es sollte so aussehen:

[ServiceContract] 
    public interface IDoStuff 
    { 
     [OperationContract] 
     [WebInvoke(Method = "POST", 
      UriTemplate = "DoStuff", 
      ResponseFormat = WebMessageFormat.Json, 
      RequestFormat = WebMessageFormat.Json)] 
     TestObj DoWork(TestInputObj Inp); 
    } 

Um es xml zu machen, ändern Sie einfach das Responseformat. Wenn Sie Ihren Post-Befehl ausführen, erhalten Sie JSON, eine separate Methode mit dem XML-Format würde Ihnen XML geben.

1

Wissen Sie, dass Sie XmlSerializerFormat brauchen? Dies wird nur benötigt, wenn Sie in XML serialisieren müssen, das nicht den Regeln für den Data Contract Serializer entspricht.

Wenn Sie das brauchen, dann brauchen Sie einen zweiten Dienst. Das ist aber ziemlich einfach. Extrahieren Sie einfach die Innereien der Operationen in separate Methoden, und rufen Sie diese Methoden dann von beiden Diensten auf.

0

Ich glaube, Sie beziehen sich auf XMLSerilization-Attribut in einfügen als XML-Typ. Wenn dies der Fall ist, hat dies keine Auswirkungen auf Ihre JSON-Daten. Sie können das verwenden, um beide XML & Json zu serilisieren. response.Content.ReadAsJsonDataContract()/ReadAsXmlDataContract() wobei T für den XMLSerilizable-Typ steht.