我有模特儿让这样说:
export default class UserObject
{
name: string;
id: string;
validateInsert()
{
}
}
如果我这样做:
const modelUser: UserModel = new UserModel();
modelUser.ID = 1;
modelUser.Name = "Ibrahim Aziz";
modelUser.validateInsert();
一切正常,但如果我这样做:
modelUser = JSON.parse(stringJSONUser);
modelUser.validateInsert();
我会得到错误说验证插入不是一个函数,它似乎JSON解析只传递值,甚至没有启动它自己的对象,任何想法?
3条答案
按热度按时间ehxuflar1#
您可能想访问json.org,它对JSON有一个非常简洁的描述。
简而言之:
"function"不在列表中,JSON中没有函数。
您将需要一个变通方法,可能是another answer建议的方法,或者其他方法。
虽然我不了解TypeScript,但您可以从以下JavaScript示例中了解一些信息:
JSON.parse
还有一个可选的第二个参数,它可以对所有从JSON恢复的"things"进行转换。在上面示例的"correctUser"部分,每个"things"都被检查是否是对象,如果是对象,它就被"强制转换"为UserObject,从而获得缺少的函数(虽然至少据我所知,JavaScript中没有真正的强制转换,但Object.assign
使创建适当的对象和填充其字段变得简单。我认为您也需要在TypeScript中做同样的事情,因为类型Assert说它们实际上不对对象做任何事情)。问题是这里的每个对象都是UserObject,所以如果你有多个类,你必须以某种方式区分它们(也许通过检查它们有什么字段),并相应地创建替换对象。
toe950272#
parse用于将有效的JSON字符串数据转换为JSON对象。它不会将函数转换为JSON对象中的JavaScript函数。
请看看这个链接了解更多详情。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse
同样,如果你用一个或多个函数在一个已有对象上应用/调用这个函数,它会用一个字符串对象替换已有对象。
cpjpxq1n3#
你可以看看这个问题:Parse JSON String into a Particular Object Prototype in JavaScript,其中接受的答案建议用途:
Object.setPrototypeOf({ a: 1 }, Foo.prototype)