我想讀取一個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