Возврат формата JSON и XML из веб-службы .NET 3.5 WCF (REST)

У меня есть существующая веб-служба, которая возвращает ответы в формате XML, и я хотел бы добавить несколько новых методов, возвращающих JSON. Нужно ли мне создавать отдельную веб-службу, которая возвращается в формате JSON, или можно смешать?

Если я использую ResponseFormat = WebMessageFormat.JSON, мне нужно, чтобы служба была аннотирована с помощью [DataContractFormat], но, похоже, у меня нет этого и [XmlSerializerFormat], который требуется для формата ответа типа xml.


person Michael Behan    schedule 16.07.2009    source источник


Ответы (3)


Я не понимаю, почему это невозможно. Вы аннотируете службу с помощью атрибута [ServiceContract] (а не DataContractFormat). Это должно выглядеть так

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

Чтобы сделать его xml, просто измените формат ответа. Когда вы выполните команду post, вы получите json, отдельный метод с форматом xml предоставит вам xml.

person Steve    schedule 16.07.2009

Вы точно знаете, что вам нужен XmlSerializerFormat? Это необходимо только в том случае, если вам нужно сериализовать в XML, который не соответствует правилам сериализатора контрактов данных.

Если вам это действительно нужно, вам понадобится вторая услуга. Хотя это довольно просто. Просто выделите внутренности общих операций в отдельные методы, а затем вызовите эти методы из обеих служб.

person John Saunders    schedule 16.07.2009

Я полагаю, вы имеете в виду атрибут XmlSerializer в типе «Вставить как XML». Если это так, это не повлияет на ваши данные JSON. Вы можете использовать это для сериализации как XML, так и JSON. _2 _ / _ 3_ где T для типа XMLSerializable.

person PradeepN    schedule 23.07.2010