передать массив С# в Javascript

У меня есть список массивов на С#, где я храню данные ip-адресов и провайдеров и считаю, как следует из таблицы mysql,

ArrayList conRc = new ArrayList();

while (readIp.Read())
{
    string ipVal = readIp.GetString(0);
    string ispVal = readIp.GetString(1);
    int conLvlVal = readIp.GetInt32(2);

    conRc.Add(new ConfidenceLvl(ipVal,ispVal,conLvlVal));
}

Это мой класс ConfidenceLvl,

public class ConfidenceLvl
{
    private string ip;
    private string isp;
    private int conLvl;

    public string Ip
    {
        get { return ip; }
        set { ip = value; }
    }
    public string Isp
    {
        get { return isp; }
        set { isp = value; }
    }
    public int ConLvl
    {
        get { return conLvl; }
        set { conLvl = value; }
    }

    public ConfidenceLvl(string ipVal, string ispVal, int conLvlVal) {
        this.conLvl = conLvlVal;
        this.ip = ipVal;
        this.isp = ispVal;
    }
}

Я хочу передать это в javascript, чтобы я мог использовать это значение для создания диаграммы через jqPlot. Пожалуйста, помогите с этим. Я использовал этот метод для передачи мои значения в javascript, но все это идет как одна строка. Я хочу взять эти значения отдельно и работать с ними в javascript. Пожалуйста помогите. Большое Вам спасибо.

РЕДАКТИРОВАТЬ: благодаря Доминику Киршенхоферу я, наконец, остановился на этом после успешного разбора на javascript. Могу ли я узнать, как манипулировать этими данными? как получать записи 1 на 1?? я пытался, но ничего не получилось,

    <asp:HiddenField ID="correlate" value= "" runat="server" />
    <script language="javascript" type="text/javascript">
        var jsonString = document.getElementById('correlate').value;
        var arr_from_json = JSON.parse(jsonString);

    </script>

Строка json выглядит следующим образом:

    [{"Ip":"0","Count":"10"},{"Ip":"1","Count":"11"},{"Ip":"2","Count":"12"},{"Ip":"3","Count":"13"},{"Ip":"4","Count":"14"},{"Ip":"5","Count":"15"},{"Ip":"6","Count":"16"},{"Ip":"7","Count":"17"},{"Ip":"8","Count":"18"},{"Ip":"9","Count":"19"}] 

Могу ли я узнать, как я могу работать с этими записями :)

РЕДАКТИРОВАТЬ: РЕШЕНО ЭТО

    <asp:HiddenField ID="correlate" value= "" runat="server" />
    <script language="javascript" type="text/javascript">
        var jsonString = document.getElementById('correlate').value;
        jsonString = "{\"corrData\":" + jsonString + "}";
        var arr_from_json = JSON.parse(jsonString);
        alert(Number(arr_from_json.corrData[2].Ip)+1);
    </script>

Я добавил corrData, чтобы я мог вызывать его по целочисленному идентификатору, как в массиве. :) спасибо за вашу помощь, ребята :) если есть лучший способ .. пожалуйста, дайте мне знать :)


person Hasitha Shan    schedule 29.08.2012    source источник
comment
см. stackoverflow.com/questions/7846333/ может дать вам представление...   -  person Amol Kolekar    schedule 29.08.2012
comment
Вы используете веб-формы или mvc?   -  person Sam Shiles    schedule 29.08.2012
comment
да, я использую веб-формы :)   -  person Hasitha Shan    schedule 29.08.2012


Ответы (2)


Если у вас есть список или массив фиксированных значений в коде, который вы хотите использовать в js, более простой способ описан в опубликованной вами ссылке. Средства сериализуют список и сохраняют его в скрытом поле. Когда вам нужно использовать его в js, просто десериализуйте и используйте его.

О сериализации см.: http://blogs.microsoft.co.il/blogs/pini_dayan/archive/2009/03/12/convert-objects-to-json-in-c-using-javascriptserializer.aspx

Десериализация: десериализация из json в объект javascript

Итак, что вам нужно сделать: 1) Используйте общий список. 2) Заполните список по мере необходимости. 3) Преобразовать список в массив => довольно просто, используя linq: myList.ToArray() 4) Сериализировать массив в строку json. Смотрите 1-ю ссылку. 5) Поместите скрытое поле на свою страницу и установите строку json в качестве его значения (код позади). 6) Всякий раз, когда вам нужно использовать этот массив в js, просто десериализуйте значение скрытого поля и используйте его. Смотрите 2-ю ссылку.

person Dominik Kirschenhofer    schedule 29.08.2012
comment
Спасибо за ответ. :) я проверю это и вернусь :) - person Hasitha Shan; 29.08.2012
comment
эй ... я пытался исследовать этот метод ... можете ли вы уточнить ... может быть несколько ссылок ... :), потому что я новичок в веб-разработке, и я немного потерялся здесь. - person Hasitha Shan; 29.08.2012
comment
вау, это имеет смысл .. я сделаю то, что вы сказали, и вернусь :) большое спасибо :) - person Hasitha Shan; 29.08.2012
comment
Я внес изменения в код... не могли бы вы помочь мне с этим последним моментом... я пытался искать в Интернете, например json.org/js.html, но не смог получить никакого значения :( .. я хочу получить записи, когда захочу из него :) большое спасибо - person Hasitha Shan; 29.08.2012
comment
хорошо, я решил это и добавил свое решение к самому вопросу :) .. пожалуйста, дайте мне знать, если есть лучший способ сделать это .. большое спасибо за ваши советы и помощь :) очень признателен :) - person Hasitha Shan; 29.08.2012
comment
Вам действительно нужен этот материал corrData? Я думаю, вы сможете сделать arr_from_json[0] при первом редактировании. (Еще не пробовал) - person Dominik Kirschenhofer; 30.08.2012
comment
Только что создал небольшой образец. arr_from_json[0].Ip работает. Обычно это помогает использовать Firebug (расширение Firefox), DeveloperTool (интегрированный в IE7+) или Chrome DeveloperTools для отладки таких скриптов, чтобы увидеть, в каком состоянии вы находитесь! - person Dominik Kirschenhofer; 30.08.2012
comment
хорошо..спасибо большое!!!! я тоже попробую это :) :) большое спасибо за ваши усилия :) я только что попробовал хитрый способ сделать это .. большое спасибо, что указали мне на это :) .. - person Hasitha Shan; 30.08.2012

Если вы используете ASP.net MVC, вы можете сделать следующее. Я переписал ваш код, чтобы использовать универсальный список вместо ArrayList. ArrayList не является строго типизированным и обычно считается устаревшим, поскольку дженерики появились вместе с .net 2.0.

Обратите внимание, что следующий код будет работать только с запросом POST, если вы не изменили его, включив в него JsonRequestBehavior.AllowGet.

public class ConfidenceLvl
    {
        public string IpVal { get; set; }
        public string IspVal { get; set; }
        public string ConLvlVal { get; set; }
    }

    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            IList<ConfidenceLvl> levels = new List<ConfidenceLvl>();
            levels.Add(new ConfidenceLvl { IpVal = "129.123.123.123", ConLvlVal = "1", IspVal = "AOL" });
            levels.Add(new ConfidenceLvl { IpVal = "129.123.0.0", ConLvlVal = "3", IspVal = "CompuServe" });

            // Controlled json
            return Json(levels.Select(lv => new { title = lv.IspVal, ip = lv.IpVal }));

            // As it comes json
            //return Json(levels);
        }
    }
}
person Sam Shiles    schedule 29.08.2012
comment
Большое спасибо за ваш ответ и время. Я проверю этот метод :) - person Hasitha Shan; 29.08.2012
comment
Я использую веб-формы, есть ли разница между этими двумя... извините, если это глупый вопрос. но я новичок в веб-разработке в asp.net - person Hasitha Shan; 29.08.2012
comment
Да, этот метод не будет работать для веб-форм. См. предложенную ссылку для способа сделать это с помощью веб-форм: stackoverflow.com/questions/227624/ - person Sam Shiles; 29.08.2012
comment
Я внес изменения в код... не могли бы вы помочь мне в этом последнем бите... я пытался искать в Интернете, например stackoverflow.com/questions/4828207/, но не смог получить никакого значения :( - person Hasitha Shan; 29.08.2012