我想读取一个JSON对象,其中包含的日期/时间格式不能直接由.NET的DateTime结构进行分析。为了避免在我的结构日期/时间有一个“诠释”领域,我写了一个定制DateTimeConverter:为什么JavaScriptSerializer会忽略我的转换器?
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;
}
}
但是,当我看到一个JSON字符串的JavaScriptSerializer,它不使用我的自定义转换器:
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类型或使用int的任何方法?
我猜简单:它已经发现,在内置处理器匹配......因此不寻求更多。 – 2010-06-23 19:25:36
不,那不是。如果我直接反序列化DateTime,则使用我的自定义转换器。另外,请参阅MSDN:“多个转换器可以使用相同的JavaScriptSerializer实例进行注册,并且这些转换器可以指示对相同类型的支持。因此,为特定类型注册的最后一个转换器是将被使用的转换器JavaScriptSerializer来序列化类型。“ – Cygon 2010-06-24 09:29:46