首先一定會有一個問題,為什麼要這樣轉,理由很簡單,因為我們呼叫第三方的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。

文章標籤
全站熱搜
創作者介紹
創作者 baechang 的頭像
baechang

翁百璋與大泡泡的奇幻旅程

baechang 發表在 痞客邦 留言(0) 人氣(1,557)