【问题标题】:Returning JSON AND XML format from a .NET 3.5 WCF web service (REST)从 .NET 3.5 WCF Web 服务 (REST) 返回 JSON 和 XML 格式
【发布时间】:2009-07-16 21:36:08
【问题描述】:
我有一个返回 XML 响应的现有 Web 服务,我想添加一些返回 JSON 的新方法。我是否必须创建以 JSON 格式返回的单独 Web 服务,还是可以混合使用?
如果我使用 ResponseFormat = WebMessageFormat.JSON,我需要使用 [DataContractFormat] 注释服务,但我似乎无法拥有该服务和 xml 类型响应格式所需的 [XmlSerializerFormat]。
【问题讨论】:
标签:
.net
xml
wcf
web-services
json
【解决方案1】:
我不明白为什么这是不可能的。您使用 [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。
【解决方案2】:
您知道需要 XmlSerializerFormat 吗?仅当您需要序列化为不符合 Data Contract Serializer 规则的 XML 时才需要这样做。
如果您确实需要,那么您确实需要第二项服务。不过这很容易。只需将共同操作的内容提取到单独的方法中,然后从两个服务中调用这些方法。
【解决方案3】:
我相信您指的是“粘贴为 XML”类型中的 XmlSerializer 属性。如果是这样,它不会影响您的 JSON 数据。您可以使用它来序列化 XML 和 JSON。 response.Content.ReadAsJsonDataContract<T>()/ReadAsXmlDataContract<T>() 其中 T 代表 XMLSerializable 类型。