第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Linux 上反序列化 TimeZoneInfo 會拋出“月份參數(shù)必須在 1 到 12 范圍內(nèi)”

在 Linux 上反序列化 TimeZoneInfo 會拋出“月份參數(shù)必須在 1 到 12 范圍內(nèi)”

C#
GCT1015 2023-09-24 11:12:01
我正在將一個庫從 .net Framework 4.7 遷移到 .net core 2.2,并發(fā)現(xiàn)了深度對象克隆的問題,我將其范圍縮小到下面的一個簡短的可重現(xiàn)代碼片段。自己嘗試一下:.net框架4.7.2(通過).net core 2.2(失?。﹗sing System;using System.IO;using System.Runtime.Serialization.Formatters.Binary;namespace Test{    public class Program    {        public static void Main(string[] args)        {            // any zone here, don't care what it is            var zone = TimeZoneInfo.GetSystemTimeZones()[0];                        var formatter = new BinaryFormatter();            using (MemoryStream stream = new MemoryStream())            {                formatter.Serialize(stream, zone);                stream.Seek(0, SeekOrigin.Begin);                var result = formatter.Deserialize(stream);                Console.WriteLine("all ok");            }        }    }}在使用 .net core 2.2 的 Windows 平臺上,這工作正常,但在 Linux 平臺上出現(xiàn)異常:Unhandled Exception: System.Runtime.Serialization.SerializationException: An error occurred while deserializing the object.  The serialized data is corrupt. ---> System.ArgumentOutOfRangeException: The Month parameter must be in the range 1 through 12.Parameter name: month   at System.TimeZoneInfo.TransitionTime.ValidateTransitionTime(DateTime timeOfDay, Int32 month, Int32 week, Int32 day, DayOfWeek dayOfWeek)   at System.TimeZoneInfo.TransitionTime.System.Runtime.Serialization.IDeserializationCallback.OnDeserialization(Object sender)   --- End of inner exception stack trace ---   at System.TimeZoneInfo.TransitionTime.System.Runtime.Serialization.IDeserializationCallback.OnDeserialization(Object sender)   at System.Runtime.Serialization.ObjectManager.RaiseDeserializationEvent()問題:如何TimeZoneInfo在 Linux 中的 .net core 2.2 中使用二進(jìn)制序列化?
查看完整描述

1 回答

?
梵蒂岡之花

TA貢獻(xiàn)1900條經(jīng)驗 獲得超5個贊

確實(shí),這看起來像一個錯誤。

但是,從您的評論來看,似乎有一個簡單的解決方法。不要序列化TimeZoneInfo,而是更改對象以僅序列化 ID。如果您愿意,您可以在其周圍放置一個帶有 get/set 訪問器的屬性,以方便使用。

例如,代替:

public class Foo

{

? ? public TimeZoneInfo TimeZone { get; set; }

}

你可以這樣做:


public class Foo

{

? ? public string TimeZoneId { get; set; }


? ? public TimeZoneInfo TimeZone

? ? {

? ? ? ? get => TimeZoneInfo.FindSystemTimeZoneById(TimeZoneId);

? ? ? ? set => TimeZoneId = value.Id;

? ? }

}

唯一BinaryFormatter序列化字段,因此只有隱藏在自動屬性后面的字符串TimeZoneId才會被序列化/反序列化。在序列化/反序列化期間將TimeZoneInfo被忽略,并且僅在您自己的代碼中訪問對象時使用。


查看完整回答
反對 回復(fù) 2023-09-24
  • 1 回答
  • 0 關(guān)注
  • 128 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號