I'm using the JavaScriptSerializer.Deserialize<>()
method to convert JSON I receive from the client into a custom C# class. One of the properties of that class is a DateTime
. Currently the Deserialize<>()
method throws an error, saying
"(my date string)" is not a valid value for DateTime.
I've tried sending the date using several different formats, including ticks and other formats produced by the various built-in JavaScript Date() methods, but none of them have worked.
Exactly what format is the Deserialize<>()
method expecting in order to parse it into a .NET DateTime
?
You are right, @friendlycello. Unfortunally, JSON.stringify()
removes backslashes from this \/Date(ticks)\/
.Net serializer DateTime format.
I wrote a custom function that adjusts the output from JSON.stringify()
, including these backslashes. So, I can keep almost untoched, only replacing from JSON.stringify()
to customJSONstringify()
in $.ajax()
data: param.
function customJSONstringify(obj) {
return JSON.stringify(obj).replace(/\/Date/g, "\\\/Date").replace(/\)\//g, "\)\\\/")
}
Eduardo provided a solution on the JavaScript side. You also have the option of correcting the issue on the server side.
// C# Side
var obj = Regex.Replace(json, @"/Date\((\-?\d*)\)/", @"\/Date($1)\/")
Note that I used a single replace. This is safer and more accurate than using two replace()
. The same expression can be used to replace the expression in the JavaScript example.
// Safer version of function using a single replace
function customJSONstringify(obj) {
return JSON.stringify(obj).replace(/\/Date\((\-?\d*)\)\//g, "\\/Date($1)\\/");
}
Two calls to replace()
could cause the second replace to replace text that had nothing to do with the data. Note to be even safer the expression can be updated to only replace instances of /Date(.\*)/
that are preceded and followed by a single quote. That would ensure that if there was text describing the /Date(.\*)/
syntax it wouldn't get replaced.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With