首先一定會有一個問題,為什麼要這樣轉,理由很簡單,因為我們呼叫第三方的Web Service接收
到的資料型態就是DataSet,
在還沒有實際與第三方串結時,我們可以先在自己的專案裡面模擬第三方的動作,如此就可以便免掉第三方開
發時程跟我方時程順序前後的問題,簡單來說就是不用等到對方真的給,我們自己要先做個假的來應付我方的
程式開發可以持續進行.
在Web Service 按右鍵選擇 在Page Inspector 中檢視得到Web Service 路徑 如下畫面
在MVC 專案中選擇加入服務參考
輸入Web Servie 路徑 按下探索,. 並選取指定的Service
Controller中 加入using 並建立Web Service Soap物件
using WebAPI01.ServiceReference;
ECServiceSoapClient MyService = new ECServiceSoapClient(); //初始化Web Service
google到這篇文章,寫了一個DataTable的Extensions
Mapping DataSet with ASP.Net MVC Model
http://vikasjagdale.blogspot.tw/2014/08/mapping-dataset-with-aspnet-mvc-model.html
public static class CollectionExtensions
{
public static IList<T> ConvertTo<T>(this DataTable table)
{
if (table == null)
{
return null;
}
List<DataRow> rows = new List<DataRow>();
foreach (DataRow row in table.Rows)
{
rows.Add(row);
}
return ConvertTo<T>(rows);
}
public static IList<T> ConvertTo<T>(IList<DataRow> rows)
{
IList<T> list = null;
if (rows != null)
{
list = new List<T>();
foreach (DataRow row in rows)
{
T item = CreateItem<T>(row);
list.Add(item);
}
}
return list;
}
public static T CreateItem<T>(this DataRow row)
{
T obj = default(T);
if (row != null)
{
obj = Activator.CreateInstance<T>();
foreach (DataColumn column in row.Table.Columns)
{
PropertyInfo prop = obj.GetType().GetProperty(column.ColumnName);
try
{
object value = row[column.ColumnName];
if (value != DBNull.Value)
{
prop.SetValue(obj, value, null);
}
}
catch
{
// You can log something here
throw;
}
}
}
return obj;
}
}
這樣就可以很簡單的DataTable轉過來,
ex var objEC103111 = EC103111.Tables[0].ConvertTo<EC103111>();
最後我們先在Colntroller使用JSon Result 來確認看看資料有沒有抓回來
注意:: return時要留意以下,必須要寫成這樣,
return Json(objEC103111, JsonRequestBehavior.AllowGet);
不然會回錯錯誤 ::
此要求已被封鎖,因為用於 GET 要求時無法向第三方網站揭露敏感資訊。若要允許 GET 要求,請將 JsonRequestBehavior 設定為 AllowGet。
