.NET の DateTime 構造では直接解析できない形式の日付/時刻を含む JSON オブジェクトを読み込もうとしています。日付/時刻の構造体に「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 を使用したりせずに、これを回避する方法はありますか?