如何解决JSON.stringify 仅超类字段
我想使用 JSON.stringify(object)
序列化一个对象以通过网络发送它。
因为我对后端和前端使用相同的代码库,所以我有一个超类,前端和后端的特殊实现都使用它。
当我在对象上 JSON.stringify(object)
时,所有字段都被序列化。
我尝试将对象分配给超类的一个空对象,但这也复制了字段并且没有帮助。
const commonObject: CommonObject = new CommonObject(null,null,null);
Object.assign(commonObject,localObject);
JSON.stringify(commonObject);
有没有办法可以使用为超类中不存在的所有字段返回 undefined
的替换函数?我不确定如何在运行时获取字段。这可能吗?
如果某些术语在节点、打字稿、javascript 世界中没有以这种方式使用,我很抱歉。我最初来自 java 背景。
解决方法
我想我终于明白你在问什么了。
要仅对对象的超类部分进行字符串化,我建议您创建一个 .superToJSON()
方法,并在该方法中创建一个临时对象,仅将要序列化的属性复制到该对象中,然后在该临时对象上调用 JSON.stringify()
。通过这种方式,您可以精确控制字符串化的内容。我不会尝试为此使用 replacer
功能。另外,像这样的代码可能更好地编码,您可以有意识地决定序列化中包含的内容而不是排除的内容。
然后您可以将其发送给客户端,客户端将能够使用它来分配给超类实例。
举个例子:
class someClass {
superToJson() {
const temp = {
propA: this.propA,propB: this.propB
};
return JSON.stringify(temp);
}
}
或者,如果您有很多属性,您可以列出它们并使用实用函数:
function copyProps(target,source,listOfProps) {
for (let prop of listOfProps) {
target[prop] = source[prop];
}
return target;
}
class someClass {
superToJson() {
const temp = copyProps({},this,["propA","propB","propC"]);
return JSON.stringify(temp);
}
}
在 Javascript 中,没有自动的方法来做到这一点,因为没有关于哪些属性属于哪个超类或基类或其他任何东西的概念。它们都只是同一对象上的属性,没有记录或知道特定来源,无论最初分配给它们的是类层次结构的哪个部分。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。