使用ASP.NET AJAX非同步呼叫Web Service和頁面中的類方法(8):伺服器端和用戶端資料類型的自動轉換:數群組類型

來源:互聯網
上載者:User

本文來自《ASP.NET AJAX程式設計 第II卷:用戶端Microsoft AJAX Library相關》的第三章《非同步呼叫Web Service和頁面中的類方法》,請同時參考本章的其他文章。

 

3.7.5 數群組類型

ASP.NET AJAX非同步通訊層能夠為數群組類型自動產生相應的用戶端JavaScript數組,如果數組中的項目為簡單類型,那麼無需任何額外操作。考慮如下的返回int[]的Web Service方法:

[WebMethod]
public int[] GetIntArray()
{
    return new int[] { 1, 2, 3, 4, 5, 6 };
}

通過ASP.NET AJAX非同步通訊層調用該Web Service方法之後,傳回值在Visual Studio調試器中顯示出的結構3-27所示。

圖3-27伺服器端int[]類型在用戶端的結構

傳遞簡單類型的數組也非常直觀,考慮如下接受一個int[]參數的Web Service方法:

[WebMethod]
public void SendIntArray(int[] intArray)
{
    // ......
}

我們可以在用戶端構造一個整數數組,然後通過ASP.NET AJAX非同步通訊層傳遞給該方法:

var intArray = [1, 2, 3, 4, 5];
PeopleManagementService.SendIntArray(intArray);

圖3-28顯示了傳入的整數數組在Visual Studio調試器中顯示出的結構。

圖3-28 用戶端的整數JavaScript數組可被自動轉換為伺服器端int[]類型

如果數組中包含的項目為複雜類型,那麼我們仍舊需要為Web Service類添加[GenerateScriptType(typeof([TypeName]))]屬性,其中[TypeName]表示該複雜類型的名稱。依舊是以前面的Employee類為例,考慮下面這個返回一個Employee[]類型的Web Service方法,注意其中調用了前面小節中給出的GetGenericEmployeeList()方法:

[WebMethod]
public Employee[] GetEmployeeArray()
{
    return GetGenericEmployeeList().ToArray();
}

從用戶端調用該Web Service方法之後,傳回值在Visual Studio調試器中顯示出的結構3-29所示。

圖3-29伺服器端Employee[]類型在用戶端的結構

為Web Service類添加[GenerateScriptType(typeof(Employee))]屬性之後,向伺服器端傳遞Employee[]類型的數組也不難理解。考慮如下接受Employee[]類型的Web Service方法:

[WebMethod]
public void SendEmployeeArray(Employee[] employeeArray)
{
    // ......
}

然後用如下JavaScript代碼構造一個包含用戶端Employee對象的數組,並傳遞給該SendEmployeeArray()方法:

var employeeArray = new Array();
for (var i = 0; i < 10; ++i) {
    var em = new Employee();
    em.Id = i;
    em.Name = "name " + i;
    em.Email = "name" + i + "@some.com";
    em.Salary = 1000;
    
    employeeArray.push(em);
}
PeopleManagementService.SendEmployeeArray(employeeArray);

ASP.NET AJAX非同步通訊層將自動把這個JavaScript數群組轉換為伺服器端的Employee[]類型。圖3-30顯示了傳入參數在Visual Studio調試器中顯示出的結構。

圖3-30用戶端的Employee數組可被自動轉換為伺服器端Employee[]類型

如果需要的話,我們還可以將數群組類型改為更為泛化的ArrayList。例如對於如下返回的ArrayList的Web Service方法來說,由於其中實際包含的仍是Employee項目,所以用戶端將仍會接收到與圖3-29中所示相同的Employee數組。

[WebMethod]
public ArrayList GetEmployeeList()
{
    ArrayList employeeList = new ArrayList();
    for (int i = 0; i < 10; ++i)
    {
        Employee em = new Employee(
            i,
            string.Format("name {0}", i),
            string.Format("name{0}@some.com", i),
            5000
        );
        employeeList.Add(em);
    }
 
    return employeeList;
}
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.