2009-07-16 6 views
5

Ho un servizio Web esistente che restituisce risposte XML e vorrei aggiungere alcuni nuovi metodi che restituiscono JSON. Devo creare un servizio web separato che ritorni in JSON o posso avere un mix?Restituisce il formato JSON AND XML da un servizio Web WCF di .NET 3.5 (REST) ​​

Se utilizzo ResponseFormat = WebMessageFormat.JSON, è necessario che il servizio abbia annotato con [DataContractFormat] ma non riesco a trovarlo e [XmlSerializerFormat] che è richiesto per il formato di risposta del tipo xml.

risposta

3

Non vedo perché questo non è possibile. Annoti il ​​servizio con l'attributo [ServiceContract] (non DataContractFormat). Dovrebbe apparire come

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

Per renderlo xml, basta cambiare il modulo di risposta. Quando esegui il comando post, otterrai json, un metodo separato con il formato xml ti darà xml.

1

Sai per certo che hai bisogno di XmlSerializerFormat? Questo è necessario solo se è necessario serializzare in XML che non è conforme alle regole per il serializzatore del contratto dati.

Se necessario, è necessario un secondo servizio. È abbastanza facile però. Basta estrarre le budella delle operazioni in comune in metodi separati, quindi chiamare questi metodi da entrambi i servizi.

0

Credo che si stia utilizzando l'attributo XMLSerilization in incolla come tipo xml. Se è così non influenzerà i dati JSON. puoi usarlo per serilizzare sia XML & Json. response.Content.ReadAsJsonDataContract()/ReadAsXmlDataContract() dove T è per tipo XMLSerilizable.