我有与JSON.stringify()串联的对象,然后用localstorage.setItem()保存,然后用localstorage.getItem()检索,然后用JSON.parse解析(),最后返回到程序中使用的对象数组。这是我的代码:
var exampleObjects = [];
function objectExample() {
this.exampleFunction = function() {
return this.otherObjectCreatedElsewhere.value;
}
this.otherObjectCreatedElsewhere;
}
function main() {
exampleObjects[ 0 ] = new objectExample();
exampleObjects[ 0 ].otherObjectCreatedElsewhere = otherObjectCreatedElsewhere;
exampleObjects[ 0 ].exampleFunction(); //Works
var save0 = JSON.stringify( exampleObjects[ 0 ] );
localstorage.setItem( 'key', save0 );
save0 = localstorage.getItem( 'key' );
exampleObjects[ 0 ] = JSON.parse( save0 );
exampleObjects[ 0 ].exampleFunction(); //No longer works, instead throws error exampleObjects[ 0 ].exampleFunction is not a function
}
main();
现在我用复活方法查找了JSON.parse,但我不能为我的生活搞清楚。我没有去过学校,这只是我的一个爱好,但是我已经培养了几年了。我真的很喜欢它,但是这些时间令人沮丧。
修改
我已经通过cloudfeet的宝贵建议解决了这个问题。基本上我从保存的JSON字符串中取出对象,然后将它们解析为对象,然后创建一个新对象并重新分配所有丰富的属性。
再次感谢!
答案 0 :(得分:3)
JSON不是JavaScript。它使用JavaScript语法的有限子集,但它可以编码的唯一数据类型是:
JSON 不能够序列化功能。任何函数都将被省略(如private void button8_Click(object sender, EventArgs e)
{
connection.Open();
OleDbCommand command = new OleDbCommand();
command.Connection = connection;
string query1 = "UPDATE Points SET PNTS =
(case when EmpName = '" + comboBox1.Text +
"' then '" + label15.Text + "' when EmpName = '" +
comboBox2.Text + "' then '" + label16.Text +
"' when EmpName = '" + comboBox3.Text + "' then '" +
label17.Text + "' end) WHERE EmpName in ('" +
comboBox1.Text + "', '" + comboBox2.Text + "', '" +
comboBox3.Text + "')";
command.CommandText = query1;
command.ExecuteNonQuery();
connection.Close();
}
),原型将被销毁等等。
所以:你需要做的是从你的富对象(用方法等)转换成JSON,然后再转换回来。
编辑:一个粗略的例子:
undefined
当您序列化时,您将获得function MyObj(name, age) {
this.name = name;
this.age = age;
this.hello = function () {
alert('Hello, ' + this.name + '!');
};
}
- 没有{"name": "Sarah", "age": 38}
条目。
所以,要解码,你需要解压缩它:
"hello"
这是一种简单的方法,解码逻辑是硬编码的 - 有很多方法可以让它变得更加漂亮,比如JSON.stringify()和JSON.parse()的第二个参数,以及.toJSON()方法,但它的组织大致相同,组织方式不同。