将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字符串。
为什么var不接收JSON字符串作为c#发送?
因为你让它用JSON字符串作为内容创建一个数组:
ClientScript.RegisterArrayDeclaration("data", json);
相反,您可以自己创建变量并使用RegisterClientScriptBlock:
string script = "var data = " + json + ";";
ClientScript.RegisterClientScriptBlock(this.Page.GetType(), "dataVar", script, true);