Bhi*_*bim 2 javascript rest json typescript angular
我有这样的模型:
export default class UserObject
{
name: string;
id: string;
validateInsert()
{
}
}
Run Code Online (Sandbox Code Playgroud)
如果我喜欢这样:
const modelUser: UserModel = new UserModel();
modelUser.ID = 1;
modelUser.Name = "Ibrahim Aziz";
modelUser.validateInsert();
Run Code Online (Sandbox Code Playgroud)
一切工作正常,但如果我这样做:
modelUser = JSON.parse(stringJSONUser);
modelUser.validateInsert();
Run Code Online (Sandbox Code Playgroud)
我会收到错误消息,说 validate insert 不是一个函数,似乎 JSON 解析只传递值,甚至不启动它自己的对象,知道吗?
您可能想访问json.org,它对 JSON 的内容有非常简洁的描述。
简而言之:
“function”不在列表中,JSON 中没有函数。
您将需要一种解决方法,也许是另一个答案所建议的,或者其他什么。
class UserObject{
constructor(name,id){
this.name=name;
this.id=id;
}
validateInsert(){
return this.name.length>0 && this.id!=0;
}
}
var originalUser=new UserObject("tevemadar",123);
console.log("original:",originalUser.name,originalUser.id,originalUser.validateInsert());
var json=JSON.stringify(originalUser);
console.log("json:",json);
var failUser=JSON.parse(json);
try{
console.log("fail:",failUser.name,failUser.id,failUser.validateInsert());
}catch(ex){
console.log("failUser failed:",ex.toString());
}
var correctUser=JSON.parse(json,function(key,value){
if(typeof value==='object')
return Object.assign(new UserObject,value);
return value;
});
try{
console.log("correctUser:",correctUser.name,correctUser.id,correctUser.validateInsert());
}catch(ex){
console.log("correctUser failed:",ex);
}Run Code Online (Sandbox Code Playgroud)
JSON.parse还有一个可选的第二个参数,它可以对从 JSON 恢复的所有“事物”进行转换。在上面示例的“正确用户”部分中,检查每个“事物”是否是一个对象,如果它是一个对象,则将其“强制转换”为 UserObject,从而获得缺少的函数(虽然在中没有真正的强制转换)至少据我所知,JavaScriptObject.assign使得创建一个合适的对象并填充其字段变得简单。我认为你也需要在 TypeScript 中做同样的事情,因为类型断言说它们实际上并不对对象做任何事情。
问题是这里每个对象都将是 UserObject,因此如果您有多个类,您必须以某种方式告诉它们(也许通过检查它们具有哪些字段),并相应地创建替换对象。
| 归档时间: |
|
| 查看次数: |
4082 次 |
| 最近记录: |