Итак, я использовал JSON для сериализации списка объектов из C# для отправки в JS. Список, кажется, прибывает в браузер, но я не могу понять, как правильно его использовать. Имеет смысл, что то, что приходит, является строкой, но, похоже, это массив ... Я не уверен, и я не могу понять, как его использовать.Parse JSON string/array в объекты JS
Вот мой JS
var data;
function testFunc() {
d3.select("#stuff").append("h2").text(data[0].source);
}
Когда я посылаю один объект вышеприведенного JS печатает значение правильно. Вот что C#
protected void btnTest_Click(object sender, EventArgs e)
{
string json = JsonConvert.SerializeObject(new testClass(66,77));
ClientScript.RegisterArrayDeclaration("data", json);
ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "id", "testFunc()", true);
}
Когда я смотрю на отладчике браузера я вижу эту строку ниже, когда выше выполняется:
var data = new Array({"target":66,"source":77});
Это то, что позволяет мне печатать значение 77 в JS выше
Досадно, что я хочу отправить список этого одного и того же объекта. Поэтому я использую следующую C#
List<TestGraph.Models.testClass> L = new List<TestGraph.Models.testClass>()
private List<testClass> fill()
{
for (int i = 0; i < 10; i++)
{
L.Add(new testClass(i, i+1));
}
return L;
}
protected void btnTest_Click(object sender, EventArgs e)
{
fill();
string json = JsonConvert.SerializeObject(L);
ClientScript.RegisterArrayDeclaration("data", json);
ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "id", "testFunc()", true);
}
Когда я использую те же JS не напечатает что-нибудь, однако список становится в JS, потому что я вижу ниже, когда я смотрю на отладчике браузера:
var data = new Array([{"target":0,"source":1},{"target":1,"source":2},{"target":2,"source":3},{"target":3,"source":4},{"target":4,"source":5},{"target":5,"source":6},{"target":6,"source":7},{"target":7,"source":8},{"target":8,"source":9},{"target":9,"source":10}]);
Так как список данных в браузере, как я могу его использовать?
PS Не очень нужно, но вот мой TestClass если кому-то интересно
public class testClass
{
public int target { get; set; }
public int source { get; set; }
public testClass(int t, int s)
{
target = t;
source = s;
}
public testClass()
{
}
}
EDIT
Для тех, предполагая, я попытался с помощью JSON.синтаксический анализ (данные)
Я использовал это:
var data;
var data2 = JSON.parse(data);
function testFunc() {
d3.select("#stuff").append("h2").text(data2[1].source);
}
РЕДАКТИРОВАТЬ
Так что, когда я шаг через C# линии:
JsonConvert.SerializeObject(L);
помещает следующую строку в JSON var:
"[{\"target\":0,\"source\":1},{\"target\":1,\"source\":2},{\"target\":2,\"source\":3},{\"target\":3,\"source\":4},{\"target\":4,\"source\":5},{\"target\":5,\"source\":6},{\"target\":6,\"source\":7},{\"target\":7,\"source\":8},{\"target\":8,\"source\":9},{\"target\":9,\"source\":10}]"
Тогда в теории, когда я звоню:
ClientScript.RegisterArrayDeclaration("data", json);
он должен поставить выше строку в вар «данные» в JS, однако, когда я делаю предупреждение о нем, как, например:
var data;
function testFunc() {
alert(data);
}
Что появляющийся
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Я также попробовал другой метод в моей C#:
protected void btnTest_Click(object sender, EventArgs e)
{
fill();
string json = JsonConvert.SerializeObject(L);
Response.Write(string.Concat("<input id='data' type='hidden' value='", json, "' />"));
ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "id", "testFunc()", true);
}
Какие необходимы следующие изменения к JS
var field = document.getElementById('data');
var data = JSON.parse(field.value);
function testFunc() {
alert(data);
}
Когда я попробовать этот новый метод я получаю то же самое, как и раньше:
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
И я сделал второе испытание на поле вар из метод выше и получил
[object HTMLInputElement]
добавьте ваш образец JSON –
'уаг данных = новый Array ([{ "цель": 0, "источник": 1}, { "цель": 1, "источник" : 2}, { "мишень": 2, "источник": 3}, { "мишень": 3, "источник": 4}, { "мишень": 4, "источник": 5}, { "мишень" : 5, "источник": 6}, { "цель": 6, "источник": 7}, { "цель": 7, "источник": 8}, { "мишень": 8, "источник": 9 }, {"target": 9, "source": 10}]); 'представляет собой массив объектов в другом бессмысленном массиве, поскольку' var ary = [] 'такой же, как' var ary = new Array() ' , – PHPglue
@PHPglue Я вижу это, но я этого не писал. Это просто в моем отладчике браузера. Это то, что отправлено в браузер. – nhoughto