将JSON从c#发送到JavaScript

本文关键字:JavaScript JSON | 更新日期: 2023-09-27 18:13:03

如果我使用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不接收JSON字符串作为c#发送?我怎么能让它只是发送字符串,所以我可以使用json。parse()解析它?我想最终发送一个完整的对象列表,这将更容易让数据到达预期的JSON字符串。

将JSON从c#发送到JavaScript

为什么var不接收JSON字符串作为c#发送?

因为你让它用JSON字符串作为内容创建一个数组:

ClientScript.RegisterArrayDeclaration("data", json);

相反,您可以自己创建变量并使用RegisterClientScriptBlock:

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