When using KnockoutJS and the Knockout Mapping Plugin, you may notice extra properties are being serialized with your viewmodels, ex. "__ko_mapping__" or "copiedProperties" objects.
JSON Example:
{
"MyObject": {
"Id": "00000000-0000-0000-0000-000000000000",
"Type": 1,
"Name": "Default MyObject"
},
"__ko_mapping__": {
"ignore": [],
"include": ["_destroy"],
"copy": [],
"observe": [],
"mappedProperties": {
"MyObject.Id": true,
"MyObject.Type": true,
"MyObject.Name": true
},
"copiedProperties": {},
"": {}
},
"someOtherSettings": ["Yes", "No"]
}
These are just extra objects included with the KO mapping plugin. To remove these properties from your JSON, Use the KnockoutMapping serializer instead of using the vanilla KnockoutJS serializer.
Remove:
var vm = ko.toJS(MyViewModel);
var vm = ko.toJSON(MyViewModel);
Replace with:
var vm = ko.mapping.toJS(MyViewModel);
var vm = ko.mapping.toJSON(MyViewModel);
Happy coding!