将C#对象数组传递给Javascript

时间:2015-09-16 17:59:32

标签: javascript c# json

我知道有很多关于如何做到这一点的很好的例子,但我似乎无法将从C#到javascript的对象数组传递给工作。我认为我非常接近,因为客户端的阵列正在接收一些东西,当我发送12件东西时,它打印出来:

"[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]"

正如你所看到的那样,有些对象,甚至有12个对象,这意味着它正在被发送(至少相对)正确并存储。我只是不确定如何将字符串解析为对象并将它们存储在数组。下面的代码是我如何得到上面的长串对象。阅读其他示例我尝试首先使用JSON解析字符串,但我无法正确解决问题。实施例

var data;
var nodeEdges = JSON.parse(data);

以下是我正在使用的代码,它为我提供了很长的' [object Object]'。这是我发送的地方:

protected void VisualizeBtn_Click(object sender, EventArgs e)
        {
            List<Connection> Connections = new List<Connection>();  
            var x = from b in db.Connections where (b.VirusId == virusId) select b;
            Connections = x.ToList();
            var json = JsonConvert.SerializeObject(Connections.ToList());
            ClientScript.RegisterArrayDeclaration("nodeEdges", json);
            ScriptManager.RegisterStartupScript(this.Page,Page.GetType(), "id","visualize('#visrep')", true);
        }

这是我收到它的JS(我正在使用D3.js)。

var nodeEdges = [];
function visualize(element) {
    d3.select(element).selectAll("h2").data(nodeEdges).enter().append("h2").text(function (d) { return "We did it: " + d});
}

可能不需要它,但这是我试图发送的对象

public class Connection
{
    [Key]
    public int ConnectionId { get; set; }
    public int source { get; set; }
    public int destination { get; set; }
    public bool direct { get; set; }
    public string VirusId { get; set; }
    public Connection(int source_, int destination_, bool direct_, string virusId)
    {
        source = source_;
        destination = destination_;
        direct = direct_;
        VirusId = virusId;
    }
    public Connection()
    {

    }
}

修改

我已将问题分解为一个更简单的例子。我的新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);
}

我的新javascript

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

序列化字符串未被接收到&#39;数据&#39;变种。当我逐步完成C#时,序列化的字符串就在那里并且看起来不错但它并没有出现在JS中

我的&#39; testClass&#39;对于那些科学家来说

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()
    {

    }
}

1 个答案:

答案 0 :(得分:0)

关于上面编辑中的简化问题,解决方案非常明显。我所要做的就是将JS函数更改为下面的代码,我可以访问该数组。真正明确的定义。

var data;
function testFunc() {
    d3.select("#stuff").append("h2").text(data[0].source);
}