日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

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

 路人甲Java 2021-04-01

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

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

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

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

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

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

我還專門看了看序列化之后的字符串:

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

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

但是同時也給了我一個提示,是不是再用XmlSerializer序列化反序列化的時候,也是類型出了問題呢?

經(jīng)過認(rèn)真對比.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" />

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

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

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

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

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

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

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

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多