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 还是我这边的配置错误?
我查看了来源并注意到 ToSerializedString
和 FromSerializedString
的实现不同。
最后一个数字:30,对于 AdjustmentRule
是 BaseUtcOffsetDelta
。 Mono 实现不需要此参数并抛出上述异常。
我已经用二进制 serialization/deserialization 解决了这个问题。
我已经将 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 还是我这边的配置错误?
我查看了来源并注意到 ToSerializedString
和 FromSerializedString
的实现不同。
最后一个数字:30,对于 AdjustmentRule
是 BaseUtcOffsetDelta
。 Mono 实现不需要此参数并抛出上述异常。
我已经用二进制 serialization/deserialization 解决了这个问题。