了解ToArray和JSON之间的区别

时间:2011-11-12 05:58:08

标签: c# jquery web-services asp.net-4.0

我正在研究jquery以将数据绑定到下拉列表&我也使用了Web服务方法,它工作得很好但是我没有得到一些澄清我,e用于将数据绑定到一个下拉列表我从web方法获取数据,返回到Array对象和另一个下拉列表我得到来自Web方法的数据,它是根据JSON对象返回的,但在前端我没有任何区别。他们中的大多数都告诉序列化的json好方法,所以这里究竟发生了什么?我有点困惑     请帮我     谢谢

**here is my code**
Default.aspx

<html>
<head runat="server">
    <title>JsonAndToArray</title>

    <script type="text/javascript" src="js/jquery.min.js"></script>

    <script type="text/javascript">

        $(document).ready(function() {
            ddlActivityType = document.getElementById("<%=ddlActivity.ClientID %>");
            $.ajax({
                type: "POST",
                contentType: "application/json;charset/utf-8",
                url: "Visit.asmx/GetActivityByJSON",
                dataType: "json",
                success: function(results) {
                    results = eval(results.d);
                    $('#ddlActivity').get(0).options.length = 0;
                    $('#ddlActivity').get(0).options[0] = new Option('  --select--  ', '0');
                    $.each(results, function(val, text) {
                        $('#ddlActivity').append($('<option></option>').val(text[1]).html(text[0]));
                    });
                }
            });

            ddlActivityType1 = document.getElementById("<%=ddlActivity2.ClientID %>");
            $.ajax({
                type: "POST",
                contentType: "application/json;charset/utf-8",
                url: "Visit.asmx/GetActivity",
                dataType: "json",
                success: function(results) {
                    results = eval(results.d);
                    $('#ddlActivity2').get(0).options.length = 0;
                    $('#ddlActivity2').get(0).options[0] = new Option('--select--', '0');
                    $.each(results, function(val, text) {
                        $('#ddlActivity2').append($('<option></option>').val(text[1]).html(text[0]));
                    });
                }
            });
        });

    </script>

</head>
<body>
    <form id="form1" runat="server">
    Json-Activity :
    <select id="ddlActivity" runat="server">
    </select>   
    <br />
    <br />
    ToArray-Activity :
    <select id="ddlActivity2" runat="server">
    </select>
    <br />
    <br />
    <asp:Button ID="btnJson" runat="server" Text="Json" OnClick="Json_click"/>
    </form>
</body>
</html>


Defalut.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
using System.Web.Script.Serialization;

public partial class Defalut: System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void Json_click(object sender,EventArgs e)
    {
    }
}


**webservices**

**

 - Visit.asmx

**


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Data;
using System.Data.SqlClient;
using System.Web.Script.Serialization;
using Facade;

/// <summary>
/// Summary description for Visit
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
[System.Web.Script.Services.ScriptService]
public class Visit : System.Web.Services.WebService
{

    public Visit()
    {

        //Uncomment the following line if using designed components 
        //InitializeComponent(); 
    }

    [WebMethod]
    public string HelloWorld()
    {
        return "Hello World";
    }

    [WebMethod]
    public IList<string[]> GetActivity()
    {
        IList<string[]> values = new List<string[]>();
        //string value = "";
        try
        {
            SqlConnection con_New = new SqlConnection(@"Data Source=SQLEXPRESS;Initial Catalog="Database";Integrated Security=True;");
            con_New.Open();
            SqlCommand cmdSelect_ST = new SqlCommand("select id,name from table", con_New);
            SqlDataAdapter da_ST = new SqlDataAdapter(cmdSelect_ST);

            DataSet ds = new DataSet();
            da_ST.Fill(ds);
            DataTable dt = ds.Tables[0];
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                string[] ActivityType = new string[2];
                ActivityType[0] = dt.Rows[i]["name"].ToString();
                ActivityType[1] = dt.Rows[i]["id"].ToString();
                values.Add(ActivityType);
            }          
        }
        catch (Exception ex)
        {

        }
        return values;
    }


    [WebMethod]
    public string GetActivityByJSON()
    {
        IList<string[]> values = new List<string[]>();
        string value = "";
        try
        {
            SqlConnection con_New = new SqlConnection(@"Data Source=SQLEXPRESS;Initial Catalog="Database";Integrated Security=True;");
            con_New.Open();
            SqlCommand cmdSelect_ST = new SqlCommand("select name,id from table", con_New);
            SqlDataAdapter da_ST = new SqlDataAdapter(cmdSelect_ST);

            DataSet ds = new DataSet();
            da_ST.Fill(ds);
            DataTable dt = ds.Tables[0];
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                string[] ActivityType = new string[2];
                ActivityType[0] = dt.Rows[i]["name"].ToString();
                ActivityType[1] = dt.Rows[i]["id"].ToString();
                values.Add(ActivityType);
            }
            JavaScriptSerializer js = new JavaScriptSerializer();
            value = js.Serialize(values);
        }
        catch (Exception ex)
        {

        }
        return value;
    }
}

1 个答案:

答案 0 :(得分:0)

在第一次调用中,您将返回一个数组,该数组由系统转换为json数组。你回复:

IList<string[]> values = new List<string[]>();

在第二次调用中,您将转换为jsaon数组并将其作为字符串返回。以下是执行转换的代码:

JavaScriptSerializer js = new JavaScriptSerializer();
value = js.Serialize(values);

因为json只是以某种方式格式化的字符串 - 所以没有区别。就在创建要发回的字符串以及谁(您的代码或系统代码)创建它时。

相关问题