node.js - 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 中,没有自动的方法来执行此操作,因为不知道哪些属性属于哪个超类或基类或其他什么。它们都只是同一对象上的属性,没有记录或知道特定的来源,无论最初分配它们的类层次结构的哪个部分。
推荐阅读
- jquery-select2 - 如何自定义选择下拉菜单的位置
- c - 在 Mac 上安装什么以及如何运行可执行文件?
- c++ - 从派生类的构造函数访问全局变量时,“未在此范围内声明变量”
- android - Retrofit2 无法使用 localhost:8080 进行测试
- javascript - 在两页之间传递日期
- javascript - 如何在 Angular 组件中运行 Javascript
- c# - 如果 Oracle 存储过程执行时间较长,C# 应用程序不会超时
- selenium - 一旦在 Robot 框架中单击按钮,验证按钮是否存在就会失败
- python - 如何使用 Djikstras 算法获得一个来源和两个目的地的最短距离?
- python - 如何在一个网格中镶嵌 1000 个栅格?按文件名顺序?