如何从从SQL Server存储过程获取JSON结果的C#Web API返回JSON结果?
我在SQL Server中有一个存储过程,它将结果作为JSON返回 通过WebAPI,我调用存储过程并将结果存储在SQLDataReader中 我现在必须返回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()) {
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中返回,这意味着我必须创建这么多对象。有更好的办法吗?