欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
Webservice SOAP傳輸序列化總結 以及webservice之序列化以及反序列化實(shí)例

一、所有Webservice中傳遞的對象都必須能夠序列化,這個(gè)是作為在網(wǎng)絡(luò )之間傳輸的必要條件。XML WebService和SOAP標準支持的數據類(lèi)型如下:

  1.基本數據類(lèi)型. 

      標準類(lèi)型,如:int float bool DateTime string等基本數據類(lèi)型

  2.枚舉.

      支持枚舉Enum定義的類(lèi)型

  3.自定義對象.

      可以傳遞任意基于自定義類(lèi)或結構創(chuàng )建的對象。 但要注意一點(diǎn): 它只能傳輸數據成員(變量和屬性).

      如果定義了方法,則方法不能進(jìn)行序列化傳輸,序列化后只剩下數據成員.

  4.DataSet對象

      支持DataSet,切記:不支持DataTable和DataRow,DataSet已經(jīng)是XML Webservice能夠支持的最小的可序列化對象.

  5.XmlNode對象

      基于XmlNode的對象可以表示XML文檔的一部分.

  6.數組和集合

      可以使用任何被支持的類(lèi)型的數組和簡(jiǎn)單集合,包括: DataSet對象/XmlNode對象和自定義對象. 


二、webservice傳輸過(guò)程中常遇到的問(wèn)題

 ?。?)在調用WebService并給一個(gè)方法傳遞了一個(gè)DataRow參數時(shí),運行時(shí)會(huì )拋出異常: "沒(méi)法將參數序列化!",如果把DataRow加入到DataSet中,并將DataSet作為參數          傳遞再運行就OK了。 這是因為:XML WebService只能對數據集DataSet對象類(lèi)型進(jìn)行XML序列化,不能對DataRow對象類(lèi)型進(jìn)行XML序列化造成的錯誤.因此了解一下               XML WebService支持序列化的基本數據類(lèi)型是比較重要的.
 ?。?)除了上述的基本類(lèi)型以外,Webservice服務(wù)不能完成直接序列化傳輸,但是大部分數據結構借助序列化,仍然可以在Webservice上傳輸。

     例如:

     在將一個(gè)自定義類(lèi)序列化到文件時(shí),出現如下錯誤提示:

     System.Reflection.TargetInvocationException: 調用的目標發(fā)生了異常。 --->

     System.InvalidOperationException: 生成 XML 文檔時(shí)出錯。 ---> System.InvalidOperationException:

     不應是類(lèi)型 Alink.T1System.Windows.PrintSetting。使用 XmlInclude 或 SoapInclude 屬性靜態(tài)指定非已知的類(lèi)型。

      經(jīng)查找資料,發(fā)現當被序例化的類(lèi)中包含自定義的復雜類(lèi)時(shí),需要使用XmlIncludeAttribut屬性標識自定義類(lèi)

     現在修改如下:

     using System.Xml.Serialization;

     [XmlInclude(typeof(自定義類(lèi)))]

     [Serializable]

     public class MyDIYClass

     自定義的類(lèi)都添加標記,提供的webservice方法也加標記

     [WebMethod]

     [XmlInclude(typeof(自定義類(lèi)))]

     public object WebServiceMethod(Object requestObj)

     要把該類(lèi)中內含的自定義類(lèi)都用XmlInclude一次,就可以解決問(wèn)題了;

    這樣就可以傳輸了,List<>,ArrayList對象都可以傳輸,但是返回類(lèi)型為ArrayList的[WebMethod]方法,在客戶(hù)端調用后,得到的是object數組,而且object中的             property全部都變?yōu)閒ield。另外,接口也不能序列化例如List<Interface>也是不能序列化的,遇到這種情況可以把接口修改為抽象類(lèi),同時(shí)在抽象類(lèi)上添加[XmlInclude]屬      性,最后需要注意一點(diǎn),自己寫(xiě)的類(lèi)要想序列化必須有默認構造函數(不帶參數的構造函數)。

    三、xml序列化答疑:

     ?。?)需序列化的字段必須是公共的(public)

     ?。?)需要序列化的類(lèi)都必須有一個(gè)無(wú)參的構造函數

     ?。?)枚舉變量可序列化為字符串,無(wú)需用[XmlInclude]

     ?。?)導出非基本類(lèi)型對象,都必須用[XmlInclude]事先聲明。該規則遞歸作用到子元素

          如導出ArrayList對象,若其成員是自定義的,需預包含處理:

          using System.Xml.Serialization;

          [XmlInclude(typeof(自定義類(lèi)))]

     ?。?)Attribute中的IsNullable參數若等于false,表示若元素為null則不顯示該元素。

          也就是說(shuō):針對值類(lèi)型(如結構體)該功能是實(shí)效的

          若數組包含了100個(gè)空間,填充了10個(gè)類(lèi)對象,則序列化后只顯示10個(gè)節點(diǎn)

          若數組包含了100個(gè)空間,填充了10個(gè)結構體對象,則序列化后會(huì )顯示100個(gè)節點(diǎn)

     ?。?)真正無(wú)法XML序列化的情況,某些類(lèi)就是無(wú)法XML序列化的(即使使用了[XmlInclude])

              IDictionary(如HashTable)

              System.Drawing.Color

              System.Drawing.Font

              SecurityAttribute聲明

              父類(lèi)對象賦予子類(lèi)對象值的情況

              對象間循環(huán)引用

     ?。?)對于無(wú)法XML序列化的對象,可考慮使用自定義xml序列化(實(shí)現IXmlSerializable接口)實(shí)現IDictionary的類(lèi),可考慮

     ?。?)用其它集合類(lèi)替代;(2)用類(lèi)封裝之,并提供Add和this函數

  ?。?)某些類(lèi)型需要先經(jīng)過(guò)轉換,然后才能序列化為 XML。如XML序列化System.Drawing.Color,可先用ToArgb()將其轉換為整數,過(guò)于復雜的對象用xml序列化不便的                    話(huà),可考慮用二進(jìn)制序列化。

  四、webservice序列化和反序列化實(shí)例

    //序列化為xml的方法    

    public static string ToXml(this object obj)
        {
            XmlSerializer serializer = new XmlSerializer(obj.GetType());
            StringWriter sw = new StringWriter();
                serializer.Serialize(sw, obj);
            return sw.ToString();
        }

    //反序列化為XML的方法

    public static T ToObj<T>(string xml) //where T : Object        {            XmlSerializer serializer = new XmlSerializer(typeof(T));                     StringReader sw = new StringReader(xml);            object obj = serializer.Deserialize(sw);            if (obj is T)            {                return (T)obj;            }            else            {                return default(T);            }        }

    //客戶(hù)端調用webservice中的InsertData(string entity)方法,傳遞的是的類(lèi)實(shí)體product_entity,序列化代碼如下:    

      pm.WebProductService ps = new pm.WebProductService(); 
      Entity.VAERP.Product product_entity = new Entity.VAERP.Product();
      string
entity = product_entity.ToXml(); string result = ps.InsertData(entity);

    //服務(wù)端webservice中反序列化,代碼示例如下:    

      //entity是客戶(hù)端傳過(guò)來(lái)的序列化的參數
      Entity.VAERP.Product product_entity = new Entity.VAERP.Product();
      product_entity = ToObj<Entity.VAERP.Product>(entity);

 

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Java 遠程通訊技術(shù)及原理分析 – 碼農網(wǎng)
.net與java 使用自定義對象通過(guò)WebService調用
用WCF + Entity Framework 序列化時(shí)的陷阱
ADO.NET入門(mén)教程(一) 初識ADO.NET
使用C++進(jìn)行對象序列化
流與文件管理與序列化(java vs DotNet)
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久