1

Closed

TimeZoneNotFoundException in WriteDateTimeString (System.IO.TextWriter, DateTime, DateFormatHandling, Char)

description

DLL : Json45r11\Bin\Net40\Newtonsoft.Json.dll
Framework : Mono 4.0.30319.1

Invoked code (from ildasm) :
result = JsonConvert.SerializeObject(this.Data);
Exception :
System.TimeZoneNotFoundException: Exception of type 'System.TimeZoneNotFoundException' was thrown.
  at System.TimeZoneInfo.get_Local () [0x00048] in C:\cygwin\tmp\monobuild\build\BUILD\mono-2.10.8\mcs\class\System.Core\System\TimeZoneInfo.cs:100 
  at Newtonsoft.Json.Utilities.DateTimeUtils.GetUtcOffset (DateTime d) [0x00000] in :0 
  at Newtonsoft.Json.JsonConvert.WriteDateTimeString (System.IO.TextWriter writer, DateTime value, DateFormatHandling format, Char quoteChar) [0x00000] in :0 
  ...
  at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeObject (Newtonsoft.Json.JsonWriter writer, System.Object value, Newtonsoft.Json.Serialization.JsonObjectContract contract, Newtonsoft.Json.Serialization.JsonProperty member, Newtonsoft.Json.Serialization.JsonContainerContract collectionContract, Newtonsoft.Json.Serialization.JsonProperty containerProperty) [0x00000] in :0
Your code:
internal static void WriteDateTimeString(TextWriter writer, DateTime value, DateFormatHandling format, char quoteChar)
{
    JsonConvert.WriteDateTimeString(writer, value, value.GetUtcOffset(), value.Kind, format, quoteChar);
}
Workaround :

Replace all usages of .GetUtcOffset() in all source codes. For each error, replace the expected TimeSpan by TimeSpan.Zero. This fix will drop support of timezones but my project uses only UTC-based dates.

The error occurs when serializing DateTime values of any kind (Local,Unknown,Utc).
Closed Jan 23, 2013 at 6:41 AM by JamesNK
Report this issue to the Mono project.

comments