使用时:
var dataToSave = ko.toJSON(myViewModel);
..是否可以不序列化为空的值?
序列化我当前的viewModel会创建大约500Kb的JSON,其中大部分结尾如下:
"SomeObject": {
"Property1": 12345,
"Property2": "Sometext",
"Property3": null,
"Property4": null,
"Property5": null,
"Property6": null,
"Property7": null,
"Property8": null,
"Property9": false
}
如果我可以让序列化程序忽略空值,那么这可以减少到:
"SomeObject": {
"Property1": 12345,
"Property2": "Sometext",
"Property9": false
}
如何指示序列化程序忽略空值?
答案 0 :(得分:29)
请记住,ko.toJSON只是对JSON stringify的修改。您可以传递replacer function。
作为在Knockout中使用替换器函数的示例,我基于JSFiddle之一组合了knockout tutorials。请注意makeJson
和makeCleanJson
函数之间的区别。我们可以选择不在我们的replacer函数中返回任何值,并且将在JSON字符串中跳过该项。
self.makeJson = function() {
self.JsonInfo(ko.toJSON(self.availableMeals));
};
self.makeCleanJson = function() {
self.JsonInfo(ko.toJSON(self.availableMeals, function(key, value) {
if (value == null)
{
return;
}
else
{
return value;
}
}));
};
答案 1 :(得分:15)
您可以将toJSON方法添加到视图模型中,并使用它来删除所有不需要的属性:
ViewModel.prototype.toJSON = function() {
var copy = ko.toJS(this);
// remove any unneeded properties
if (copy.unneedProperty == null) {
delete copy.unneedProperty;
}
return copy;
}
您可以自动运行它来运行所有属性并删除空属性。