Ho un oggetto, ha una proprietà DateTime ... Voglio passare quell'oggetto da un gestore .ashx in una pagina web tramite AJAX/JSON ... Non voglio usare i controlli di terze parti ...Custom JavaScriptConverter per DateTime?
quando faccio questo:
new JavaScriptSerializer().Serialize(DateTime.Now);
ottengo questo:
"\/Date(1251385232334)\/"
ma voglio "2009/08/26" (Nevermind localizzazione ... la mia app è molto localizzato, in modo da le mie ipotesi di formattazione della data non sono in discussione in questa domanda). Se faccio/registrare un convertitore personalizzato
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;
}
}
tanto sono il risultato (in quanto il valore di ritorno del metodo serialize personalizzato è un dizionario):
{"DateTime":"8/27/2009"}
così ora nel mio JavaScript, invece di facendo
somePerson.Birthday
devo fare
somePerson.Birthday.DateTime
or
somePerson.Birthday["DateTime"]
Come posso fare in modo che il convertitore personalizzato restituisca una stringa diretta in modo da poter avere Javascript pulito?
quasi 5 anni dopo ... e non utilizzerei mai un formato data di "27/08/2009" in JSON ... Uso sempre ISO8601: 2009-08-27T00: 00: 00Z –