如果我使用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字符串到达会更容易。
答案 0 :(得分:4)
为什么var不接收C#发送的JSON字符串?
因为你告诉它用你的JSON字符串作为内容构建一个数组:
ClientScript.RegisterArrayDeclaration("data", json);
相反,请自行创建变量并使用RegisterClientScriptBlock注册它:
string script = "var data = " + json + ";";
ClientScript.RegisterClientScriptBlock(this.Page.GetType(), "dataVar", script, true);