jar*_*smk 6 serialization typescript angular
最近遇到以下难题:
标准
该打字稿文档建议用有下划线前缀的私有成员,允许getter / setter方法,利用该成员原来的“名”,间接提供公共接入(他们应该)创建对象的定义。
的角文档另有建议,但是不提供使用的getter&setter方法在它们的对象定义例的专用变量的一个例子。
问题
我一直在很大程度上遵循 Typescript 编码标准。以下面的类为例:
public class Foo{
private _bar:string;
constructor(){ this._bar='Baz'; }
get bar():string{return this._bar}
}
Run Code Online (Sandbox Code Playgroud)
使用以下代码将其序列化为 JSON:
console.log(JSON.stringify(new Foo()));
Run Code Online (Sandbox Code Playgroud)
...将产生:
{
'_bar': 'Baz'
}
Run Code Online (Sandbox Code Playgroud)
问题
我已经阅读了大量有关处理序列化的不同方式的其他文章和 StackOverflow 帖子,想要阻止“如何”,而是就所提到的行为询问“为什么”。
任何反馈将不胜感激!:)
亲切的问候
您可以通过实现自定义序列化 toJSON()
public class Foo{
private _bar:string;
constructor(){ this._bar='Baz'; }
get bar():string{return this._bar}
toJSON() {
return {bar: _bar};
}
static fromJSON(json) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
另见http://choly.ca/post/typescript-json/
Getter 和 setter 是纯 TypeScript 语言特性,与 Angular 完全无关。
private仅用于 TypeScript 中的静态分析。当它被转译为 JS 时private将不再存在。它变成了一个普通的旧 JS 对象并JSON.stringify像这样对待它。