2017-08-26 110 views
0

我有一个存储过程返回一个JSON路径:在控制器返回JSON路径MVC

GO 

alter PROCEDURE [dbo].[usp_getjsondata](


@type INT     

) 
AS 
BEGIN 

SELECT 
      [Time] as 'Time', 
      cast([Value] as varchar(10)) as 'Value' 
     FROM [dbo].[tbl_data] where type = @type 
     for JSON PATH 

END 

存储过程返回以下: Result

在控制器我已经写了下面的代码:

var json = entities.Database.SqlQuery("exec usp_getjsondata @type", 
       new SqlParameter("@type", type) 
     ).ToList(); 

json数据没有存储在变量json中。 我在这里错过了什么吗?

+0

向我们展示存储过程的完整定义,特别是如何定义其参数。 – Amy

+0

@Amy我已更新我的问题 – TheChosenOne94

+0

尝试从您的代码中删除单词“exec”。只是猜测,但这可能是问题。 – Amy

回答

0

张贴我的人回答停留在此,

FOR JSON会返回一个纪录,包含JSON格式的结果为nvarchar(最大)字段。

string json = string.Concat(entities.Database.SqlQuery("exec usp_getjsondata @type", 
    new SqlParameter("@type", type) 
)); 

可以转换回对象的列表,那么你就需要解析JSON:

var results = JsonConvert.DeserializeObject<IList<Class>>(json); 

然而,如果要做到这一点,那么这将是较好的去除存储过程中的FOR JSON,并将结果直接加载到列表中:

var results = entities.Database.SqlQuery<Class>("exec usp_getdata @type", 
    new SqlParameter("@type", type) 
).ToList();