在 WCF 服务中将 JSON 作为结果返回

10 浏览
0 Comments

在 WCF 服务中将 JSON 作为结果返回

我正在创建WCF服务,用于查询Oracle数据库并以JSON格式返回结果。如何将Oracle查询结果转换为JSON消息?

public class Service1 : IService1
{
    public HttpResponseMessage GetData(string ROOM)
    {
        List prms = 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(returnObject, new JsonMediaTypeFormatter(), MediaTypeHeaderValue.Parse("application/json"));
            
            ContentDispositionHeaderValue contentDisposition = null;
            if (ContentDispositionHeaderValue.TryParse("inline; filename=TGSData.json", out contentDisposition))
            {
                response.Content.Headers.ContentDisposition = contentDisposition;
            }
            
            return response;
        }
    }
}

它会抛出错误,如下一行所示:

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)

0
0 Comments

问题:在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作为结果。

0