在 WCF 服务中将 JSON 作为结果返回
在 WCF 服务中将 JSON 作为结果返回
我正在创建WCF服务,用于查询Oracle数据库并以JSON格式返回结果。如何将Oracle查询结果转换为JSON消息?
public class Service1 : IService1 { public HttpResponseMessage GetData(string ROOM) { Listprms = new List (); prms.Add(new OracleParameter("ROOM", OracleDbType.Varchar2, ROOM, ParameterDirection.Input)); string connStr = ConfigurationManager.ConnectionStrings["TGSDataBaseConnection"].ConnectionString; using (OracleConnection dbconn = new OracleConnection(connStr)) { DataSet userDataset = new DataSet(); var strQuery = "SELECT * from LIMS_SAMPLE_RESULTS_VW where ROOM = :ROOM"; var returnObject = new { data = new OracleDataTableJsonResponse(connStr, strQuery, prms.ToArray()) }; var response = new HttpResponseMessage(HttpStatusCode.OK); response.Content = new ObjectContent
它会抛出错误,如下一行所示:
var response = Request.CreateResponse(HttpStatusCode.OK, returnObject, MediaTypeHeaderValue.Parse("application/json"));
我已经添加了以下代码:
using System.Net.Http; using System.Net.Http.Formatting; using System.Net.Http.Headers;
并将它们作为引用添加到程序中。但仍然显示相同的错误。
![错误截图](https://i.stack.imgur.com/xT66F.png)
问题:在Wcf服务中返回JSON作为结果的原因是什么?如何解决这个问题?
原因:出现这个问题的原因是代码中使用了不兼容的请求对象和配置对象。
解决方法:将代码中的请求对象从Request
更改为HttpContext.Current.Request
。并且使用HttpRequestMessageExtensions.CreateResponse
方法来创建响应。
详细解释:根据错误信息,我们可以看到问题出现在请求对象和配置对象的不兼容上。具体地,System.Web.HttpRequest
无法转换为System.Net.Http.HttpRequestMessage
,同时System.Net.Http.Headers.MediaTypeHeaderValue
无法转换为System.Web.Http.HttpConfiguration
。此外,System.Web.HttpRequest
也没有CreateResponse
方法。
为了解决这个问题,我们需要将代码中的请求对象从Request
更改为HttpContext.Current.Request
,因为HttpContext.Current.Request
是一个System.Net.Http.HttpRequestMessage
对象。
同时,我们还需要使用HttpRequestMessageExtensions.CreateResponse
方法来创建响应。这个方法可以接受一个System.Net.Http.HttpRequestMessage
对象、一个HTTP状态码、一个结果对象和一个System.Web.Http.HttpConfiguration
对象作为参数。
参考文献:在stackoverflow上的一个回答中提到了这个问题的解决方法,链接为stackoverflow.com/a/22066963/3272054。
通过以上的解决方法,我们可以在Wcf服务中成功返回JSON作为结果。