将C#中的JSON发送到JavaScript

时间:2015-09-17 06:21:48

标签: javascript c# json

如果我使用JSON来序列化C#中的对象,那么从C#发送它的最佳/最简单方法是什么,在Javascript中接收它并在JS中反序列化它?

现在我正在尝试这个,但它似乎无法正常工作

C#

json = JsonConvert.SerializeObject(X);
ClientScript.RegisterArrayDeclaration("data", json);
ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "id", "testFunc()", true);

JS

var data;
function testFunc() {
   d3.select("#stuff").append("h3").text(data.source);
}

修改 澄清“不起作用”。我通过发送json的C#代码,发送的字符串看起来像这样

"{\"target\":0,\"source\":1}"

我将它发送到上面的javascript,它没有打印到我的页面。

我查看了浏览器调试器并看到了这一行

var data =  new Array({"target":0,"source":1});

因此,由于某些原因我的有限知识将数据发送到JS中的var,而不是作为字符串而是作为新数组。

所以我将我的JS改为

var data;
function testFunc() {
    d3.select("#stuff").append("h3").text("Source: " + data[0].source + " Target " + data[0].target);
}

并且打印出了值,但为什么var不接收C#发送的JSON字符串?我怎样才能让它只是发送字符串所以我可以使用JSON.parse()解析它?我想最终发送一个完整的对象列表,将数据作为预期的JSON字符串到达​​会更容易。

1 个答案:

答案 0 :(得分:4)

  

为什么var不接收C#发送的JSON字符串?

因为你告诉它用你的JSON字符串作为内容构建一个数组:

ClientScript.RegisterArrayDeclaration("data", json);

相反,请自行创建变量并使用RegisterClientScriptBlock注册它:

string script = "var data = " + json + ";";
ClientScript.RegisterClientScriptBlock(this.Page.GetType(), "dataVar", script, true);