使用する場合:
var dataToSave = ko.toJSON(myViewModel);
.. nullの値をnotシリアル化することは可能ですか?
現在のviewModelをシリアル化すると、約500KbのJSONが作成され、そのほとんどは次のようになります。
"SomeObject": {
"Property1": 12345,
"Property2": "Sometext",
"Property3": null,
"Property4": null,
"Property5": null,
"Property6": null,
"Property7": null,
"Property8": null,
"Property9": false
}
シリアライザーにnull値を無視させることができれば、これは次のように減らすことができます。
"SomeObject": {
"Property1": 12345,
"Property2": "Sometext",
"Property9": false
}
null値を無視するようにシリアライザーに指示する方法はありますか??
ko.toJSON は JSON stringify の単なる変更であることに注意してください。 置換関数 を渡すことができます。
Knockoutで置換関数を使用する例として、 ノックアウトチュートリアル の1つに基づいて JSFiddle をまとめました。 makeJson
関数とmakeCleanJson
関数の違いに注意してください。置換関数で値を返さないように選択すると、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;
}
}));
};
ToJSONメソッドをビューモデルに追加し、それを使用して不要なプロパティをすべて削除できます。
ViewModel.prototype.toJSON = function() {
var copy = ko.toJS(this);
// remove any unneeded properties
if (copy.unneedProperty == null) {
delete copy.unneedProperty;
}
return copy;
}
おそらく自動化して、すべてのプロパティを実行し、nullのプロパティを削除することができます。