數(shù)據(jù)加載中……
          flexjson 文檔的翻譯,這里只是一部分,更詳細(xì)的請(qǐng)?jiān)L問(wèn) http://flexjson.com.cn/flexjson.html

          來(lái)源: http://flexjson.com.cn/flexjson.html

          The Basics

          flexjson采取了不同的做法,讓你方便地控制序列化的深度。它與hibernate有個(gè)十分相似的概念延遲加載,允許你有一個(gè)連接對(duì)象模型,但控制哪些對(duì)象被加載了是在你的數(shù)據(jù)庫(kù)之外執(zhí)行。讓我們來(lái)看一個(gè)簡(jiǎn)單的例子,讓你感覺(jué)一下flexjson library如何工程。我們序列化一個(gè)Person的實(shí)例。我們不妨做到以下幾點(diǎn):

          public String doSomething( Object arg1, ... ) {

                  Person p = ...load a person...;

                  JSONSerializer serializer = new JSONSerializer();

                  return serializer.serialize( p );

              }

             

          上述代碼將會(huì)產(chǎn)生下列輸出:

          {

                  "class": "Person",

                  "name": "William Shakespeare",

                  "birthday": -12802392000000,

                  "nickname": "Bill"

          }

          Working With Includes

          看起來(lái)幾乎像你所期待的。然而我們的Person對(duì)象包含了更多的屬性比如姓名,生日,昵稱,還有電話號(hào)碼和地址?默認(rèn)情況下flexjson序列化對(duì)象的直接屬性。這只是一個(gè)淺層的代表對(duì)象。所有容器類都是沒(méi)有系列化?;蛘哒f(shuō),一對(duì)多的關(guān)系和多對(duì)多的關(guān)系并沒(méi)有序列化。是指對(duì)象引用系列化。還有多對(duì)一的關(guān)系和一對(duì)一的關(guān)系將被序列化。這一點(diǎn)與其他的library一樣,像HibernateJPA默認(rèn)是熱切加載。但是我們希望包括phonenumbers屬性,然后我們可以做到以下幾點(diǎn):

          public String doSomething( Object arg1, ... ) {

                  Person p = ...load a person...;

                  return new JSONSerializer().include("phoneNumbers").serialize(p);

          }

          在這個(gè)例子中,我們將告訴序列化器對(duì)象包括的屬性。容器類的系列化是淺層復(fù)制包括的對(duì)象內(nèi)容。所以在我們的例子中,Person有個(gè)List類型的屬性叫phonenumbers List類中包含Phong實(shí)例。這意味著flexjson將淺拷貝的Person,名單phonenumbers ,淺拷貝的每一個(gè)電話,例如內(nèi)部的名單上。所以輸出可能看起來(lái)是這樣的:

          {

                  "class": "Person",

                  "name": "William Shakespeare",

                  "birthday": -12802392000000,

                  "nickname": "Bill"

                  "phoneNumbers": [

                      {

                          "class": "Phone",

                          "name": "cell",

                          "number": "555-123-4567"

                      },

                      {

                          "class": "Phone",

                          "name": "home",

                          "number": "555-987-6543"

                      },

                      {

                          "class": "Phone",

                          "name": "work",

                          "number": "555-678-3542"

                      }

                 ]

          }

          熟悉這個(gè)用法了?這實(shí)在是太簡(jiǎn)單。如果你想包含phonenumbersaddress,你可以執(zhí)行兩次include方法,或者你可以包括兩個(gè)參數(shù),include方法使用了Java的新語(yǔ)法功能。我個(gè)人較喜歡因?yàn)槲艺J(rèn)為這將令程序短小且易于閱讀。但是,那是你自己的選擇。

              public String doSomething( Object arg1, ... ) {

                  Person p = ...load a person...;

                  return new JSONSerializer().include("phoneNumbers", "addresses").serialize(p);

              }

          所以在這種情況下,我們將只能獲得一個(gè)街,市,州,但不是郵政編碼,因?yàn)檫@是一個(gè)對(duì)象引用。它采用一種簡(jiǎn)單的固定小點(diǎn)記法。這里是一個(gè)例子,包括郵編每個(gè)地址舉例。

              public String doSomething( Object arg1, ... ) {

                  Person p = ...load a person...;

                  return new JSONSerializer().include("phoneNumbers", "addresses.zipcode").serialize(p);

          }

           

          Flexjson 是足夠聰明的知道你想要對(duì)象本身包含collection容器類和不包含collection容器類。它也足夠聰明的知道地址引用也包括郵編,讓您不用指定兩次。你可以非常容易的使用點(diǎn)符號(hào)追尋你的對(duì)象圖。

          More on Includes

          有一個(gè)候補(bǔ)的serialize )方法允許您指定一個(gè)外部對(duì)象集合。也有一些JavaScriptlibraryEXTJS(previously known as YUI-EXT)要求這為他們的JSON 數(shù)據(jù)模型。不過(guò),我并沒(méi)有發(fā)現(xiàn)有任何JSONlibrary提供這種類型的系列化。下面是一個(gè)例子:

              public String getPeople( Object arg1, ... ) {

                  List people = ...load a person...;

                  return new JSONSerializer().include("phoneNumbers").serialize("people", people);

              }

           

          上述代碼將會(huì)產(chǎn)生下列輸出:

          {

                  "people" : [

                      {

                          "class": "Person",

                          "name": "Warren Buffet",

                          "birthday": -1241467200000,

                          "nickname": "Oracle of Omaha",

                          "phonNumbers" : [ ... ],

                      },

                      {

                          "class": "Person",

                          "name": "Steven Jobs",

                          "birthday": -468702000000,

                          "nickname": "Steve",

                          "phonNumbers" : [ ... ],

                      }

                  ]

              }

          posted on 2008-04-01 09:39 java flex 結(jié)合 閱讀(1481) 評(píng)論(0)  編輯  收藏


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 明星| 新干县| 札达县| 揭东县| 宿州市| 靖西县| 邵东县| 双牌县| 聊城市| 张家港市| 浦县| 永城市| 濉溪县| 天气| 成安县| 高台县| 方城县| 龙江县| 临夏市| 高安市| 黄平县| 南和县| 泗洪县| 永胜县| 清苑县| 鸡西市| 灌南县| 金堂县| 永川市| 阜康市| 丽江市| 乌兰县| 伊宁市| 南开区| 河东区| 张掖市| 余江县| 侯马市| 潼关县| 获嘉县| 卢湾区|