【问题标题】:JavaScript().Serializer() gets [object, object]JavaScript().Serializer() 获取 [object, object]
【发布时间】:2014-09-13 11:08:54
【问题描述】:

我可以尝试将一些代码从 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 类具有我在列表中使用的三个属性:

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

当我调试它时,我的值v1 包含我想要返回的字符串,但是当我尝试获取它时,它只是一遍又一遍地显示Object。任何想法为什么会这样?

【问题讨论】:

  • [object Object] 是对象的默认字符串表示形式。因此,如果您将对象数组d1 转换为字符串,则可以预期此输出。如果您只想检查值,请使用console.log。否则,请访问您要使用的对象的属性。

标签: c# javascript serialization javascriptserializer


【解决方案1】:

当将对象转换为字符串(即写出到页面)时,它将写出[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 控制台是打开的。

【讨论】:

  • 对...所以它正确地传递了数据,直接从变量中写入它是不可见的。我现在明白了,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-13
  • 2012-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多