我正在尝试读取包含日期/时间的 JSON 对象,其格式无法直接由 .NET 的 DateTime 结构解析。为了避免在我的日期/时间结构中有一个“int”字段,我编写了一个自定义 DateTimeConverter:
public class DateTimeConverter : JavaScriptConverter {
public override IEnumerable<Type> SupportedTypes {
get { return new Type[] { typeof(DateTime), typeof(DateTime?) }; }
}
public override IDictionary<string, object> Serialize(
object obj, JavaScriptSerializer serializer
) { throw new NotImplementedException(); }
public override object Deserialize(
IDictionary<string, object> dictionary, Type type,
JavaScriptSerializer serializer
) {
return DateTime.Now;
}
}
但是当我使用 JavaScriptSerializer 读取 JSON 字符串时,它不使用我的自定义转换器:
public struct TextAndDate {
public string Text;
public DateTime Date;
}
static void Main() {
string json =
"{" +
" \"text\": \"hello\", " +
" \"date\": \"1276692024\"" +
"}";
var serializer = new JavaScriptSerializer();
serializer.RegisterConverters(new [] { new DateTimeConverter() });
var test = serializer.Deserialize<TextAndDate>(json);
}
当我直接反序列化 DateTime 值时使用转换器,而不是当我反序列化包含 DateTime 值的类型时。
为什么?在不编写自定义 DateTime 类型或使用 int 的情况下有什么办法吗?