数据加载中……
flexjson 文档的翻译,这里只是一部分,更详细的请访问 http://flexjson.com.cn/flexjson.html

来源: http://flexjson.com.cn/flexjson.html

The Basics

flexjson采取了不同的做法,让你方便地控制序列化的深度。它与hibernate有个十分相似的概念延迟加载,允许你有一个连接对象模型,但控制哪些对象被加载了是在你的数据库之外执行。让我们来看一个简单的例子,让你感觉一下flexjson library如何工程。我们序列化一个Person的实例。我们不妨做到以下几点:

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

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

        JSONSerializer serializer = new JSONSerializer();

        return serializer.serialize( p );

    }

   

上述代码将会产生下列输出:

{

        "class": "Person",

        "name": "William Shakespeare",

        "birthday": -12802392000000,

        "nickname": "Bill"

}

Working With Includes

看起来几乎像你所期待的。然而我们的Person对象包含了更多的属性比如姓名,生日,昵称,还有电话号码和地址?默认情况下flexjson序列化对象的直接属性。这只是一个浅层的代表对象。所有容器类都是没有系列化。或者说,一对多的关系和多对多的关系并没有序列化。是指对象引用系列化。还有多对一的关系和一对一的关系将被序列化。这一点与其他的library一样,像HibernateJPA默认是热切加载。但是我们希望包括phonenumbers属性,然后我们可以做到以下几点:

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

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

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

}

在这个例子中,我们将告诉序列化器对象包括的属性。容器类的系列化是浅层复制包括的对象内容。所以在我们的例子中,Person有个List类型的属性叫phonenumbers List类中包含Phong实例。这意味着flexjson将浅拷贝的Person,名单phonenumbers ,浅拷贝的每一个电话,例如内部的名单上。所以输出可能看起来是这样的:

{

        "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"

            }

       ]

}

熟悉这个用法了?这实在是太简单。如果你想包含phonenumbersaddress,你可以执行两次include方法,或者你可以包括两个参数,include方法使用了Java的新语法功能。我个人较喜欢因为我认为这将令程序短小且易于阅读。但是,那是你自己的选择。

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

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

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

    }

所以在这种情况下,我们将只能获得一个街,市,州,但不是邮政编码,因为这是一个对象引用。它采用一种简单的固定小点记法。这里是一个例子,包括邮编每个地址举例。

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

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

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

}

 

Flexjson 是足够聪明的知道你想要对象本身包含collection容器类和不包含collection容器类。它也足够聪明的知道地址引用也包括邮编,让您不用指定两次。你可以非常容易的使用点符号追寻你的对象图。

More on Includes

有一个候补的serialize )方法允许您指定一个外部对象集合。也有一些JavaScriptlibraryEXTJS(previously known as YUI-EXT)要求这为他们的JSON 数据模型。不过,我并没有发现有任何JSONlibrary提供这种类型的系列化。下面是一个例子:

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

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

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

    }

 

上述代码将会产生下列输出:

{

        "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 结合 阅读(1469) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航: