如何从从SQL Server存储过程获取JSON结果的C#Web API返回JSON结果?

如何从从SQL Server存储过程获取JSON结果的C#Web API返回JSON结果?,c#,json,asp.net-web-api,C#,Json,Asp.net Web Api,我在SQL Server中有一个存储过程,它将结果作为JSON返回 通过WebAPI,我调用存储过程并将结果存储在SQLDataReader中 我现在必须返回JSON结果 SqlDataReader=cmd.ExecuteReader() 我必须将存储过程在读取器中返回的JSON字符串转换为对API请求的JSON响应 我试过这个 using (SqlDataReader reader = cmd.ExecuteReader()) {

我在SQL Server中有一个存储过程,它将结果作为JSON返回

通过WebAPI,我调用存储过程并将结果存储在SQLDataReader中

我现在必须返回JSON结果

SqlDataReader=cmd.ExecuteReader()

我必须将存储过程在读取器中返回的JSON字符串转换为对API请求的JSON响应

我试过这个

 using (SqlDataReader reader = cmd.ExecuteReader())
                {
                    DataTable dataTable = new DataTable();
                    dataTable.Load(reader);
                    return JsonConvert.SerializeObject(dataTable);
                }
我得到的结果是

"[{\"JSON_F52E2B61-18A1-11d1-B105-00805F49916B\":\"[{\\\"ID\\\":2,\\\"StateCode\\\":42,\\\"CarrierID\\\":1,\\\"Code\\\":\\\"BI\\\",\\\"Type\\\":6,\\\"Name\\\":\\\"Bodily Injury\\\",\\\"Description\\\":\\\"Bodily Injury\\\",\\\"Priority\\\":2,\\\"IsActive\\\":true,\\\"EffectiveDate\\\":\\\"2016-11-03T00:00:00\\\",\\\"CreatedBy\\\":\\\"Admin\\\",\\\"CreatedDate\\\":\\\"2016-11-03T00:00:00\\\",\\\"ModifiedBy\\\":\\\"Admin\\\",\\\"ModifiedDate\\\":\\\"2016-11-03T00:00:00\\\"},{\\\"ID\\\":3,\\\"StateCode\\\":42,\\\"CarrierID\\\":1,\\\"Code\\\":\\\"PD\\\",\\\"Type\\\":6,\\\"Name\\\":\\\"Property Damage\\\",\\\"Description\\\":\\\"Property Damage\\\",\\\"Priority\\\":3,\\\"IsActive\\\":true,\\\"EffectiveDate\\\":\\\"2016-11-03T00:00:00\\\",\\\"CreatedBy\\\":\\\"Admin\\\",\\\"CreatedDate\\\":\\\"2016-11-03T00:00:00\\\",\\\"ModifiedBy\\\":\\\"Admin\\\",\\\"ModifiedDate\\\":\\\"2016-11-03T00:00:00\\\"},{\\\"ID\\\":4,\\\"StateCode\\\":42,\\\"CarrierID\\\":1,\\\"Code\\\":\\\"PIP\\\",\\\"Type\\\":6,\\\"Name\\\":\\\"Personal Injury Protection\\\",\\\"Description\\\":\\\"Personal Injury Protection\\\",\\\"Priority\\\":4,\\\"IsActive\\\":true,\\\"EffectiveDate\\\":\\\"2016-11-03T00:00:00\\\",\\\"CreatedBy\\\":\\\"Admin\\\",\\\"CreatedDate\\\":\\\"2016-11-03T00:00:00\\\",\\\"ModifiedBy\\\":\\\"Admin\\\",\\\"ModifiedDate\\\":\\\"2016-11-03T00:00:00\\\"},{\\\"ID\\\":5,\\\"StateCode\\\":42,\\\"CarrierID\\\":1,\\\"Code\\\":\\\"APIP\\\",\\\"Type\\\":6,\\\"Name\\\":\\\"Additional PIP\\\",\\\"Description\\\":\\\"Additional PIP\\\",\\\"Priority\\\":5,\\\"IsActive\\\":true,\\\"EffectiveDate\\\":\\\"2016-11-03T00:00:00\\\",\\\"CreatedBy\\\":\\\"Admin\\\",\\\"CreatedDate\\\":\\\"2016-11-03T00:00:00\\\",\\\"ModifiedBy\\\":\\\"Admin\\\",\\\"ModifiedDate\\\":\\\"2016-1

如果您的方法有一个返回类型
ActionResult
,那么您可以始终执行
返回Json(result,JsonRequestBehavior.AllowGet)

您从存储过程中获取的JSON字符串可以使用 类似于Newtonsoft.Json的

    var obj = JsonConvert.DeserializeObject<Object>(jsonFromSp)
var obj=JsonConvert.DeserializeObject(jsonFromSp)

然后从API返回该对象

是否尝试将数据表转换为自定义对象列表,其中对象的属性是列名?那么你应该可以通过JSON列表了吧?

我发现这个解决方案对我很有效

                using (SqlDataReader reader = cmd.ExecuteReader())
                {
                    if (!reader.HasRows)
                    {
                        jsonResult.Append("");
                    }
                    else
                    {
                        while (reader.Read())
                        {
                            jsonResult.Append(reader.GetValue(0).ToString());
                        }
                    }
                    var response = this.Request.CreateResponse(HttpStatusCode.OK);
                    response.Content = new StringContent(jsonResult.ToString(), Encoding.UTF8, "application/json");
                    return response;
                }
不需要任何JSON序列化或反序列化。简单明了!
谢谢你们的帮助

到目前为止您尝试了什么?我用我尝试过的方法更新了这个问题@Crowcoder''ActionResult''是MVC类型的返回类型,我正在寻找处理JSON数据的Web API类型返回。还有''''Json(result',JsonRequestBehavior.AllowGet));''不会返回请求可以处理的JSON数据hank you@ZeeCode。我试图从数百个表中获取数据并在API中返回,这意味着我必须创建这么多对象。有更好的办法吗?