我有一个对象,它有一个 DateTime 属性...我想通过 AJAX/JSON 将该对象从 .ashx 处理程序传递回网页...我不想使用第 3 方控件...
当我这样做时:
new JavaScriptSerializer().Serialize(DateTime.Now);
我明白了:
"\/Date(1251385232334)\/"
但我想要“2009 年 8 月 26 日”(没关系本地化......我的应用程序非常本地化,所以我的日期格式假设在这个问题上不存在争议)。如果我制作/注册自定义转换器
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;
}
}
然后我得到这个结果(因为自定义序列化方法的返回值是一个字典):
{"DateTime":"8/27/2009"}
所以现在在我的 Javascript 中,而不是做
somePerson.Birthday
我要做
somePerson.Birthday.DateTime
or
somePerson.Birthday["DateTime"]
如何让自定义转换器返回一个直接字符串,以便我可以拥有干净的 Javascript?