Występują problemy z usługą REST WCF. Obiekt wire, który próbuję zwrócić, nie ma określonych właściwości, co powoduje, że DateTime.MinValue dla właściwości typu DateTime. Usługa zwraca pusty dokument (ze statusem HTTP 200 ???). Kiedy próbuję zadzwonić JSON serializacji się wyjątek, który jest generowany jest:Dlaczego funkcja DateTime.MinValue może nie być serializowana w strefach czasowych przed UTC?
SerializationException: wartości DateTime, które są większe niż parametr DateTime.MaxValue lub mniejszy niż DateTime.MinValue po przeliczeniu na UTC nie mogą być szeregowane do JSON.
To może być powielana uruchamiając następujący kod w app konsoli:
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(DateTime));
MemoryStream m = new MemoryStream();
DateTime dt = DateTime.MinValue;
// throws SerializationException in my timezone
ser.WriteObject(m, dt);
string json = Encoding.ASCII.GetString(m.GetBuffer());
Console.WriteLine(json);
Dlaczego jest to zachowanie? Myślę, że jest to związane z moją strefą czasową (GMT + 1). Ponieważ wartość DateTime.MinValue jest domyślna (DateTime), spodziewam się, że może to być serializowane bez problemów.
Wszelkie wskazówki dotyczące sposobu, aby moje usługi REST zachowywać? Nie chcę zmienić mojej DataContract.
Czy można ustawić wartość DateTime jako zerową i użyć wartości NULL jako wartości domyślnej? – Gabe
@Gabe: Chyba mogłem. Czuję się głupio, aby zmienić mój typ, aby obejść szczegóły serializacji. Ale to chyba najbardziej pragmatyczna droga. –