Понимание различий между ToArray и JSON - PullRequest
0 голосов
/ 12 ноября 2011

Я работаю над jquery, чтобы получить данные, привязывающие их к выпадающим спискам, а также я использовал метод веб-службы, и он отлично работает, но я не получаю разъяснений, например, для привязки данных к одному выпадающему списку Данные из веб-метода, который возвращает объектам Array и для другого выпадающего списка, я получаю данные из веб-метода, который возвращает в виде объекта 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 голосов
/ 12 ноября 2011

В первом вызове вы возвращаете массив, который система преобразует в массив json. Вы возвращаете это:

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

Во втором вызове вы конвертируете в массив jsaon и возвращаете его в виде строки. Вот код, который выполняет преобразование:

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

Поскольку json - это просто строка, отформатированная определенным образом - разницы нет. Только когда создается строка для отправки и кто (ваш код или системный код) создает ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...