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).