|Some time ago I've developed a Comet infrastructure for the ASP.NET Ajax. As part of its possibilities - it enables to serialize server-side objects and stream them to the handling function at client side. It was working like a breeze, until Ive streamed some object with Date field, say something like that: |
public class TestMessage
public string _s1 = "s1";
public int _i1 = 1;
public DateTime _t1 = DateTime.Now;
Now, an instance of this TestMessage was correctly deserialized into JS object, exclude its DateTime fields, which was appearing in following form:
If youre affected by similar problem here is the reason:
1) JSON representation for the string was changed from @777@ to \/777\/ in the latest Ajax release (to prevent serialization of strings that looks like date into Date format), where 777 is num of milliseconds since January 1, 1970 UTC.
2) Currently - at the server side DateTime object is serialized as "_t1":"\/Date(777)\/"
3) If you stream it as-is to the client-side JS recognizes single \ as escape character and your date actually became /Date(777)/, which is wrong format for deserialization.
So, if you want to stream your objects correctly you here is small RegEx-based utility Ive did for it:
private static class ReplaceDateOrchestrationRegularExpression
private const string _regex =
private static readonly RegexOptions _options = ((RegexOptions.IgnorePatternWhitespace | RegexOptions.Multiline) | RegexOptions.IgnoreCase);
public static readonly Regex Expression = new Regex(_regex, _options);
public const string ReplaceOptions =
private static string ConvertToClientSideJson( string jsonedArgument )