2017-08-26 105 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();