TimeZoneInfo 的反序列化导致 Xamarin 出现异常 Android

Deserialization of TimeZoneInfo leads to exception in Xamarin Android

我已经将 TimeZoneInfos 序列化为字符串(大约 115 个项目)。 当我尝试在 Xamarin Android 应用程序中反序列化它们时,其中一些出现异常。

System.Runtime.Serialization.SerializationException: Serialization error.

at System.TimeZoneInfo.DeserializeAdjustmentRule (System.Text.StringBuilder& input) [0x0000f] in /Users/builder/data/lanes/3540/1cf254db/source/mono/mcs/class/corlib/System/TimeZoneInfo.Serialization.cs:80

at System.TimeZoneInfo.FromSerializedString (System.String source) [0x0003d] in /Users/builder/data/lanes/3540/1cf254db/source/mono/mcs/class/corlib/System/TimeZoneInfo.Serialization.cs:47

at Core.Framework.Extension.Shared.Time.HardCodedTimeZonesProvider.DeserializeTimeZone (System.String x) [0x00002] in TimeZonesProvider.cs:29

无法反序列化的序列化时区示例。

TimeZoneInfo.FromSerializedString("Venezuela Standard Time;-270;(UTC-04:30) Caracas;Venezuela Standard Time;Venezuela Daylight Time;[01:01:0001;12:31:2006;0;[1;00:00:00;1;1;];[1;00:00:00.001;1;1;];30;];");

我发现问题出在最后一个数字:30,所以下一行工作正常:

TimeZoneInfo.FromSerializedString("Venezuela Standard Time;-270;(UTC-04:30) Caracas;Venezuela Standard Time;Venezuela Daylight Time;[01:01:0001;12:31:2006;0;[1;00:00:00;1;1;];[1;00:00:00.001;1;1;];];");

在桌面应用程序中反序列化工作正常。那么,这是由于 Mono 还是我这边的配置错误?

我查看了来源并注意到 ToSerializedStringFromSerializedString 的实现不同。

最后一个数字:30,对于 AdjustmentRuleBaseUtcOffsetDelta。 Mono 实现不需要此参数并抛出上述异常。

我已经用二进制 serialization/deserialization 解决了这个问题。