JavaScriptConverter personalizado para DateTime?
Eu tenho um objeto, ele tem uma propriedade DateTime ... Eu quero passar esse objeto de um manipulador .ashx de volta para uma página da Web via AJAX / JSON ... Eu não quero usar controles de terceiros ...
quando eu faço isso:
new JavaScriptSerializer().Serialize(DateTime.Now);
Eu entendi isso:
"\/Date(1251385232334)\/"
mas eu quero "8/26/2009" (nevermind localização ... meu aplicativo é muito localizado, por isso minhas suposições de formatação de data não estão em debate nesta questão). Se eu fizer / registrar um conversor personalizado
public class DateTimeConverter : JavaScriptConverter
{
public override IEnumerable<Type> SupportedTypes
{
get { return new List<Type>() { typeof(DateTime), typeof(DateTime?) }; }
}
public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer)
{
Dictionary<string, object> result = new Dictionary<string, object>();
if (obj == null) return result;
result["DateTime"] = ((DateTime)obj).ToShortDateString();
return result;
}
public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer)
{
if (dictionary.ContainsKey("DateTime"))
return new DateTime(long.Parse(dictionary["DateTime"].ToString()), DateTimeKind.Unspecified);
return null;
}
}
então eu recebo este resultado (já que o valor de retorno do método serialize customizado é um dicionário):
{"DateTime":"8/27/2009"}
então agora no meu Javascript, em vez de fazer
somePerson.Birthday
eu tenho que fazer
somePerson.Birthday.DateTime
or
somePerson.Birthday["DateTime"]
Como posso fazer o conversor personalizado retornar uma seqüência direta para que eu possa ter JavaScript limpo?