乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      關(guān)于.NetCore與.Netframework 對(duì)于DataSet的序列化與反序列化問(wèn)題的探討.

       路人甲Java 2021-04-01

      最近完善自己的項(xiàng)目中,將很多原先的framework下的類庫(kù)都轉(zhuǎn)為.net standard類庫(kù),服務(wù)自然也往.netCore上轉(zhuǎn).因此,寫(xiě)了一個(gè)WebApi做為服務(wù)來(lái)完善自己的類庫(kù)程序.

      在我的程序體系中中有一部分的方式是要客戶端傳送Sql到服務(wù)端,服務(wù)端返回DataSet到客戶端進(jìn)行處理,WCF的服務(wù)端運(yùn)行了7,8年了都很穩(wěn)定,打算將WebApi的服務(wù)也完善進(jìn)去.

      這里自然最重要的一步就是DataSet的序列化和反序列化.

      關(guān)于DataSet的序列化與反序列化,自然是用到了我十來(lái)年一直用的XmlSerializer類來(lái)進(jìn)行,沒(méi)有任何問(wèn)題,沒(méi)想到這里在反序列化時(shí)竟然報(bào)錯(cuò),我都不敢相信自己的眼睛.

      經(jīng)過(guò)各種猜測(cè),各種嘗試后,發(fā)現(xiàn)如果客戶端也用.NetCore,就不會(huì)報(bào)錯(cuò).加之現(xiàn)在這個(gè)序列化的方式過(guò)于老舊,打算用比較新的Newtonsoft.Json來(lái)進(jìn)行DataSet的序列化與反序列化,而且還用到專門(mén)序列化與反序列化DataSet的方法

      StringDataSet = JsonConvert.SerializeObject(ds, new Newtonsoft.Json.Converters.DataSetConverter());
      DataSet ds1 = JsonConvert.DeserializeObject<DataSet>(StringDataSet, new Newtonsoft.Json.Converters.DataSetConverter());

      我還專門(mén)看了看序列化之后的字符串:

      {"Table":[{"IP":"*.*.*.*","UUID":null,"key":"XYS.Lab.BLL.LoginDemo.GetUser","value":"select * from Users where loginname_str='{0}'","創(chuàng)建時(shí)間":"2020-04-07T14:44:28","修改時(shí)間":null,"ID":"68d26fac-ea54-4617-b5ea-c0777603df5c"}]}

      我看到這個(gè)序列化后的字符串后,心就涼了,這tm的序列化完事了連個(gè)列的類型都不標(biāo)注,百分百反序列化后會(huì)有問(wèn)題,類型肯定是轉(zhuǎn)換不對(duì)的.果不其然,雖然可以反序列化成DataSet,也有值,看著也對(duì),但是往細(xì)里面看數(shù)據(jù)類型的時(shí)候,發(fā)現(xiàn)原本DataSet中的Guid類型,轉(zhuǎn)換完成后變成了string類型.這讓我很郁悶.

      但是同時(shí)也給了我一個(gè)提示,是不是再用XmlSerializer序列化反序列化的時(shí)候,也是類型出了問(wèn)題呢?

      經(jīng)過(guò)認(rèn)真對(duì)比.NetCore下序列化的結(jié)果和.Net framework序列化后的結(jié)果發(fā)現(xiàn)了:

      <xs:element name="UUID" msdata:DataType="System.Guid, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e" type="xs:string" minOccurs="0" />
      
      <xs:element name="UUID" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />

      問(wèn)題就出在這里,在.NetCore里和.Net framework里 對(duì)于這種特殊類型的序列化,做了詳細(xì)的說(shuō)明,連后面的DLL,版本號(hào)等詳細(xì)信息都列出來(lái)了,所以自然轉(zhuǎn)換不過(guò)來(lái).

      當(dāng)我把.NetCore序列化的結(jié)果里關(guān)于Guid類型的這個(gè)描述替換成了.Netframework下的之后,反序列化成功了,而且很完美.但是這里還有一個(gè)問(wèn)題,到底有多少種類型在序列化的時(shí)候跟Guid一樣呢?我查了半天也沒(méi)查到.

      所以這里陷入了兩難的境地.

      用Newtonsoft.Json序列化實(shí)在是太粗了,反序列化后竟然有數(shù)據(jù)類型不一致的問(wèn)題.

      但是用XmlSerializer序列化又太tm的細(xì)致了,我可以替換一個(gè)Guid,但是不能保證所有的類似于Guid的類型都替換.

      在此記錄也算是給各位一個(gè)提醒,少走彎路,目前我大致的想法是先用Newtonsoft.Json做序列化,真的后面出現(xiàn)類型不一致造成問(wèn)題了,再處理吧.

      Newtonsoft.Json做序列化因?yàn)轭愋凸怀霈F(xiàn)了問(wèn)題,之前的代碼在給dataset復(fù)制的時(shí)候,報(bào)錯(cuò)了,類型不對(duì),看來(lái)目前還要用XmlSerializer序列化加上專門(mén)的字符串替換方式.

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多