JavaScript()。Serializer()获取[object,object]

时间:2014-07-22 14:49:08

标签: c# javascript serialization javascriptserializer

我可以尝试将一些代码从C#序列化为JavaScript,以便我可以在客户端使用它。但是,当我执行此操作时,它会提取[object Object],[object Object],[object Object],但是如果我传递一个正常的字符串"Hello",则它可以正常工作,因此序列化似乎不是问题所在。

所以我的C#代码如下:

protected void Page_Load(object sender, EventArgs e)
{
    List<YearMonthGrid> ymgs = new List<YearMonthGrid>();
    ymgs = DAL.GetYearMonthGrid("value");


    var m = from c in ymgs where c.Month == 7 select c;

    v1 = new JavaScriptSerializer().Serialize(m);
}

我的JS代码如下:

var d1 = <%=this.v1%>;
document.write(d1);

YearMonthGrid有三个我在列表中使用的属性:

  • 名称(字符串)
  • 数量(int)
  • 月(int)

当我调试它时,我的值v1包含我想要返回的字符串,但是当我尝试获取它时,它只是反复向我显示Object。有什么想法,为什么会这样?

1 个答案:

答案 0 :(得分:0)

将对象转换为字符串(即将其写入页面)时,它将写出[object Object]而不是对象的内容。相反,尝试做这样的事情:

var d1 = <%=this.v1%>;
for (var i = 0; i < d1.length; i++) {
    var yearMonthGrid = d1[i];
    document.write(yearMonthGrid.Name + '<br />');
    document.write(yearMonthGrid.Quantity + '<br />');
    document.write(yearMonthGrid.Month + '<br />');
}

如果您在Firefox或Chrome中运行此功能(我还没有在其他浏览器的较新版本中尝试过),那么您也可以执行此操作以查看每个对象的内容:

var d1 = <%=this.v1%>;
for (var i = 0; i < d1.length; i++) {
    console.log(d1[i]);
}

确保您的JavaScript控制台已打开。