public static DateTimeOffset? ParseDateTimeOffset(JToken value)
{
var jValue = value as JValue;
if (jValue != null)
{
if (jValue.Value == null)
return null;
if (jValue.Value is DateTimeOffset)
return jValue.Value<DateTimeOffset>();
}
var rawValue = value.AsString();
if (string.IsNullOrWhiteSpace(rawValue))
return null;
rawValue = rawValue.Replace("NeoDate", "Date");
if (!DateRegex.IsMatch(rawValue))
{
DateTimeOffset parsed;
if (!DateTimeOffset.TryParse(rawValue, out parsed))
return null;
}
var text = string.Format("{{\"a\":\"{0}\"}}", rawValue);
var reader = new JsonTextReader(new StringReader(text)) {DateParseHandling = DateParseHandling.DateTimeOffset};
reader.Read(); // JsonToken.StartObject
reader.Read(); // JsonToken.PropertyName
return reader.ReadAsDateTimeOffset();
}