首页 > 解决方案 > 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背景。

标签: node.jsjsontypescriptsuperstringify

解决方案


我想我终于明白你在问什么了。

要仅对对象的超类部分进行字符串化,我建议您创建一个.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 中,没有自动的方法来执行此操作,因为不知道哪些属性属于哪个超类或基类或其他什么。它们都只是同一对象上的属性,没有记录或知道特定的来源,无论最初分配它们的类层次结构的哪个部分。


推荐阅读