多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > php開源 > php教程 > JSON序列化

JSON序列化

來源:程序員人生   發(fā)布時(shí)間:2015-05-14 09:33:19 閱讀次數(shù):3821次

JSON格式在描寫1個(gè)JavaScript對(duì)象1般都能勝任的。包括字符串、數(shù)字、Bool、數(shù)組都能在格式中分辨清楚。


         唯1的例外是日期類型,本身無標(biāo)準(zhǔn)可循,很難辨別出日期和字符串。因此各種序列化器都定制了自己的標(biāo)準(zhǔn),例如微軟的Asp.net AJAX的日期格式是:

         “/Date(628318530718)/”中間的數(shù)字是ticks。

        

         這個(gè)標(biāo)準(zhǔn)需要序列化和反序列化的雙方都到遵照,例如使用Asp.net AJAX extension序列化生成的字符串中如果含有日期類型,使用JQuery的反序列化就不能正確地還原數(shù)據(jù)。

         例如有些使用AJAX異步調(diào)用的場景,如果1個(gè)服務(wù)器真?zhèn)€方法返回1個(gè)對(duì)象,就有可能出現(xiàn)格式不兼容的現(xiàn)象。

         微軟本身就有不只1種JSON的序列化機(jī)制,例如WCF下的JSON序列化。還有諸如Json.net之類的第3方工具。

 

         另外,JSON序列化還要關(guān)心其可擴(kuò)大性。畢竟復(fù)雜對(duì)象的序列化,特別是帶有相互援用關(guān)系的對(duì)象,很容易產(chǎn)生無窮遞歸,致使堆棧溢出。

         微軟的Asp.net AJAX就提供了1種定制序列化的手段,編寫1個(gè)Converter:

         public class DemoEntityConverter : JavaScriptConverter

   {

       public overrideobject Deserialize(IDictionary<string, object>dictionary, Type type, JavaScriptSerializer serializer)

       {

           DemoEntity entity = newDemoEntity();

           entity.P1 = DictionaryHelper.GetValue(dictionary,"P1", string.Empty);

           entity.P2 = DictionaryHelper.GetValue(dictionary,"P2", string.Empty);

           entity.P3 = DictionaryHelper.GetValue(dictionary,"P3", string.Empty);

 

           //解決對(duì)象之間循環(huán)援用的問題

           if (dictionary.ContainsKey("Entity2"))

           {

               entity.Entity2 = JSONSerializerExecute.Deserialize<DemoEntity2>(dictionary["Entity2"]);

               entity.Entity2.Entity = entity;

           }

 

           return entity;

       }

 

       public overrideIDictionary<string,object> Serialize(objectobj, JavaScriptSerializer serializer)

       {

           IDictionary<string,object> dictionary = new Dictionary<string, object>();

 

           DemoEntity entity = (DemoEntity)obj;

 

           //僅序列化需要的屬性,減少json串大小

           DictionaryHelper.AddNonDefaultValue<string, object>(dictionary,"P1", entity.P1);

           DictionaryHelper.AddNonDefaultValue<string, object>(dictionary,"P2", entity.P2);

           DictionaryHelper.AddNonDefaultValue<string, object>(dictionary,"P3", entity.P3);

           dictionary.Add("Entity2",entity.Entity2);

 

           return dictionary;

       }

 

       public overrideIEnumerable<Type>SupportedTypes

       {

           get

           {

               return new Type[] { typeof(DemoEntity) };

           }

       }

   }

         上面的代碼中,就為類型DemoEntity,定制了1個(gè)JSON序列化器。固然在使用之前,需要先為類型DemoEntity,注冊(cè)此序列化器。

JSONSerializerExecute.RegisterConverter(typeof(DemoEntityConverter));

         在1個(gè)AppDomain中,僅僅注冊(cè)1次就行。重復(fù)注冊(cè)也沒有關(guān)系。

         上面的例子代碼,可以參照/MCSWebApp/StepByStep/JavascriptConverterDemos/CustomiseJsConverter.aspx

         我們系統(tǒng)中的經(jīng)常使用類型,都有對(duì)應(yīng)的序列化器來支持。

 

         至于客戶端和服務(wù)器真?zhèn)€遠(yuǎn)程調(diào)用,我們通過Asp.net AJAX擴(kuò)大的web service來實(shí)現(xiàn),先看看服務(wù)器真?zhèn)€代碼:

         namespace StepByStep.Forms

        {

[WebService(Namespace = "http://tempuri.org/")]

   [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

   [System.ComponentModel.ToolboxItem(false)]

   [System.Web.Script.Services.ScriptService]

   public class AJAXService : System.Web.Services.WebService

   {

       public class WebServerInfo

       {

           public DateTimeServerTime

           {

               get;

               set;

           }

 

           //如果想在序列化時(shí)疏忽此屬性,請(qǐng)打開下1行的注釋

           //[ScriptIgnore]

           public stringServerInformation

           {

               get;

               set;

           }

       }

 

       [WebMethod]

       public WebServerInfoGetServerInfo()

       {

           WebServerInfo result = new WebServerInfo();

 

           result.ServerTime = DateTime.Now;

           result.ServerInformation = GetServerInformation();

 

           return result;

       }

 

       private static string GetServerInformation()

       {

           StringBuilder strB = new StringBuilder();

 

           using (TextWriterwriter = new StringWriter(strB))

           {

               writer.WriteLine("MachineName: {0}",Environment.MachineName);

               writer.WriteLine("OS Version: {0}",Environment.OSVersion.VersionString);

               writer.WriteLine("Is 64 bits: {0}",Environment.Is64BitOperatingSystem.ToString());

               writer.WriteLine("Processor Count: {0}",Environment.ProcessorCount);

           }

 

           return strB.ToString();

       }

   }

   }

 

         再看看客戶真?zhèn)€代碼:

         <asp:ScriptManager runat="server" ID="scriptManager" EnableScriptGlobalization="true">

       <Services>

           <asp:ServiceReference Path="~/Forms/AJAXService.asmx"/>

       </Services>

   </asp:ScriptManager>

         <SOA:SubmitButton runat="server" Text="GetServer Info" AsyncInvoke="onGetServerInfo" />

         <script type="text/javascript">

       function onGetServerInfo() {

           StepByStep.Forms.AJAXService.GetServerInfo(onGetServerInfoSuccess,onFailed);

           //這個(gè)名字空間需要和服務(wù)器端對(duì)應(yīng)

           return false;

       }

 

       function onGetServerInfoSuccess(serverInfo) {

           $get("serverInfoText").innerText =serverInfo.ServerTime;

           $get("serverInfoText").innerText +=" " +serverInfo.ServerInformation;

 

           SubmitButton.resetAllStates();

       }

 

       function onFailed(e) {

           SubmitButton.resetAllStates();

           $showError(e);

       }

 

         </script>

 

       在這個(gè)進(jìn)程中,觸及到的對(duì)象序列化,都會(huì)遵守Asp.net AJAX的JSON序列化機(jī)制。

       上面的例子,請(qǐng)參照:

      /MCSWebApp/StepByStep/Forms/AJAXClient.aspx

生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 免费亚洲网站 | 午夜dj影视大全视频 | 女人牲交一级毛片 | 国产91区精品福利在线社区 | 一级黄色美女视频 | 成年人在线视频免费观看 | 爽好舒服快奶水视频 | 亚洲逼| 最新亚洲精品国自产在线 | 亚洲欧美综合久久 | 网站视频免费 | 九月丁香激情综合婷婷玉立 | 欧美特黄一级aa毛片 | 欧美在线视频播放 | 成人在线观看视频免费 | 成人无遮挡毛片免费看 | 羞羞动漫在线看 | 在线观看麻豆 | 日本a级精品一区二区三区 日本a级毛片免费视频播放 | 国产高清在线精品一区二区三区 | 欧美不卡一区二区三区 | 中文字幕亚洲综合久久2 | 国产啊v在线观看 | 国产精品第1页在线播放 | 免费观看男女羞羞的视频网站 | 99精品福利 | 国产综合成人久久大片91 | 伊人福利网 | 香蕉在线精品亚洲第一区 | 亚洲欧美另类日本久久影院 | 中国高清色视频www 中国国产成人精品久久 | 中文字幕 亚洲 一区二区三区 | 欧美一级成人一区二区三区 | 国产高清吃奶成免费视频网站 | 欧美一级视频免费观看 | 另类专区亚洲 | 国产亚洲精品观看91在线 | 午夜影院欧美 | 精品国产午夜久久久久九九 | 欧美性xxxx极品hdsex | 求av网址 |