iT邦幫忙

0

API新手發問(API撈MSSQL給APP)

目前簡易的API已經架設完成
API功能只有抓取MSSQL資料表資料
輸入URL回傳如下
https://ithelp.ithome.com.tw/upload/images/20190304/201155823aPpyp2JkY.png
但是顯示出來的JSON卻沒有陣列的值,無法給APP呼叫,APP不知道要抓取哪個陣列
例如像網路上公開的API範例
https://ithelp.ithome.com.tw/upload/images/20190304/20115582evHLEbHFm8.png
網路上公開的api範例,假設loans這個陣列就是我的資料表的內容,但是我卻無法在這個陣列前加入我要的名稱(我的API回傳的JSON內容前面沒有類似loans這種值),小弟是用C#寫的,麻煩高手解惑!!

以下是我api抓sql的controller的程式碼
https://ithelp.ithome.com.tw/upload/images/20190304/20115582w3SpgnO2pW.png

0
w4560000
iT邦新手 5 級 ‧ 2019-03-05 12:13:41
最佳解答

你沒有loans不知道怎麼抓資料的話,自己在外層包List
全部抓下來反序列化 在抓你自己要的資料。

不知道是不是你要的答案

public class ROOT
    {
        public List<DATA> DATA { get; set; }
    }
public class DATA
    {
        public string ID { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Gander { get; set; }
        public string Salary { get; set; }
    }
看更多先前的回應...收起先前的回應...

大大你的寫法跟我研究的方向是一樣的,但是我不清楚這段程式碼要加在哪裡,可以請大大再詳細跟我解釋一下嗎,大大你 public class DATA這段是預設在我的資料庫的地方(C#連結資料庫後預設的),請問我是要在那邊著手修改嗎,感謝你

w4560000 iT邦新手 5 級 ‧ 2019-03-05 13:53:32 檢舉

不是, public class DATA 這個是ORM幫你做的,不需要改

先釐清一下問題好了~ 我想了一下發現我的答案應該不是你要的

你現在是要把吐的JSON資料改成有loans陣列的是嗎?

你在前端不能把全部資料抓下來deserialization嗎?

沒錯,DATA那邊ORM幫我做好了,是資料庫連結後就自動做好,對,我目前就是要把我的JSON給他一個陣列名稱,例如NAME[JSON DATA]這樣,但我目前抓出來的資料只有單純一個json陣列[JSON DATA]這樣,在前端把資料全部抓下來做反序列是什麼意思呢?目前我只有辦法把資料表的東西全部抓出來,在網頁上顯示JSON資料(WEB API),抓資料的程式碼只有上面我貼的那段,單純把資料表叫出來而已,還是說我這樣的寫法本身是有問題的呢?感謝你!!

w4560000 iT邦新手 5 級 ‧ 2019-03-06 09:45:33 檢舉

你試試看

public class vmEmployees
    {
        public string ID { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Gander { get; set; }
        public string Salary { get; set; }
    }
    
public object Get()
{
   using(EmployeeDBEntities entities = new EmployeeDBEntities())
   {
   var result = (from a in entities.Employees
                 select new vmEmployees
                 {
                     ID=a.ID,
                     FirstName=a.First,
                     LastName=a.LastName,
                     Gander=a.Gander,
                     Salary=a.Salary
                 }).ToList();  
   }
   return new { TestData = result };
}

想請問這段是要寫在我的controller裡面嗎?

w4560000 iT邦新手 5 級 ‧ 2019-03-06 13:17:15 檢舉

是,我是用你的Get去改的,你複製貼上跑看看

相對應的都改成我的了,但是 return new { TestData = result };這邊無法執行
我是直接這段取代我的GET嗎?還是直接加入

w4560000 iT邦新手 5 級 ‧ 2019-03-06 14:00:54 檢舉

整段取代
return無法執行,應該是你Get()的型別沒有改成object吧

有,整段取代了,但是無法執行!
https://ithelp.ithome.com.tw/upload/images/20190306/20115582XoYUJwwmz0.png

w4560000 iT邦新手 5 級 ‧ 2019-03-06 14:19:36 檢舉

那你把return 丟進using裡吧

或是 result這段撈資料的 獨立出來 放到model裡,在抓出來用

我把return 丟到裡面了,但是出現這樣子的問題
Json回傳「LINEQ to Entities 查詢中無法建構實體或複雜類型」

w4560000 iT邦新手 5 級 ‧ 2019-03-06 14:44:23 檢舉

因為你用orm建的class去接

必須用viewmodel來接 你看我有建vmEmployees 給你

你把錯誤訊息 google一下就知道為什麼了

好,我再試試看,感謝你!

2
純真的人
iT邦高手 1 級 ‧ 2019-03-04 23:25:25

我的方式是自定義Json輸出的方式...
不是用資料庫給的Json函數輸出~

利用for xml path('')搭配stuff組Json字串~
最後將資料丟到輸出的字串再組一次~

底下是我自己習慣的VB寫法..你自己轉成你習慣的C#寫法..

Sql = ""
Sql &= " select '[' + Convert(nvarchar(max)"
Sql &= " 	,stuff(("
Sql &= " 		select ',{""LvlID"":""' + Convert(varchar,SetLvl_ID) + '""'"
Sql &= " 		+ ',""LvlName"":""' + isNull(SetLvl_Name,'') + '""}'"
Sql &= " 		from SetLvl"
Sql &= " 		order by SetLvl_Sort"
Sql &= " 		for xml path('')"
Sql &= " 	),1,1,'')"
Sql &= " ) + ']' as SetStr"
ds = func.Data_OP("MSSQL", Sql, "select")
If ds.Tables(0).Rows.Count > 0 Then
    Dim Rs As System.Data.DataRow = ds.Tables(0).Rows(0)
    SetStr = Replace(Rs.Item("SetStr") & "", "&", "&amp;")
    If SetStr = "" Then
        SetStr = "{""isconnection"":""false"",""data"":[],""errorMessage"":""無資料""}"
    Else
        SetStr = "{""isconnection"":""true"",""data"":" & SetStr & ",""errorMessage"":""""}"
    End If
Else
    SetStr = "{""isconnection"":""false"",""data"":[],""errorMessage"":""無資料""}"
End If
Response.Write(SetStr)
0
57chi
iT邦見習生 0 級 ‧ 2019-03-06 09:02:46

試試return key/value pair.
https://www.dotnetperls.com/map

我要發表回答

立即登入回答