See the jsfiddle example http://jsfiddle.net/frigon/H6ssq/
For some reason there are fields that JSON.stringify is ignoring. Is there a way to force JSON.stringify to parse them?
As the jsfiddle shows... this code...
<script src="http://cdn.kendostatic.com/2012.2.710/js/kendo.all.min.js"></script>
<script>
var model = kendo.data.Model.define({id: "ID", fields: {"Name":{type: "string"}}});
var obj = new model();
obj.set("Name","Johhny Foosball");
document.write("<br />obj.dirty property exists: ");
document.write(obj.dirty);
document.write("<br/>obj.uid property exists: ");
document.write(obj.uid);
document.write("<br/>But they dont show in JSON.stringify():<br/>");
document.write(JSON.stringify(obj));
</script>
will output:
obj.dirty property exists: true
obj.uid property exists: b4af4dfc-9d94-4a2d-b286-d6f4cbc991d8
But they dont show in JSON.stringify():
{"ID":"","Name":"Johhny Foosball"}
When an object has its own
toJSON()
implementation,JSON.stringify()
uses the object returned from that method and stringifies that.kendo.data.Model
defines it's owntoJSON()
method which only returns the properties defined on the model, which is why you aren't seeing other values (e.g.dirty
,id
,uid
) in the string result."If the stringify method sees an object that contains a toJSON method, it calls that method, and stringifies the value returned. This allows an object to determine its own JSON representation."
Here's an alternative if you must have all properties on the object:
..and the updated fiddle.
Basically I used
jQuery.extend
to clone the object then deleted thetoJSON
function. Use at your own risk! :)