Custom Serialization

If you really want to get extra funky and control how your components are serialized, you can fall back on our conventions. If the CFC has a public method called $serialize(), it will be called and its output (must be a string) will be saved in Couchbase. The CFC can also have a public method called $deserialize( id, data ), that if declared will be called and given the data so it can populate itself.

CustomUser.cfc

// CustomUser is an object that implements its own serialization scheme
// using pipe-delimited lists to store the data instead of JSON.  It has both
// a $serialize() and $deserialize() method to facilitate that.
component accessors="true"{

    property name="firstName";
    property name="lastName";
    property name="age";

    function $serialize(){
        // Serialize as pipe-delimited list
        return '#getFirstName()#|#getLastName()#|#getAge()#';
    }

    function $deserialize( ID, data ){
        // Deserialize the pipe-delimited list
        setFirstName( listGetAt( data, 1, '|' ) );
        setLastName( listGetAt( data, 2, '|' ) );
        setAge( listGetAt( data, 3, '|' ) );        
    }
}

Usage

user = new CustomUser();
user.setFirstName( "Brad" );
user.setLastName( "Wood" );
user.setAge( 45 );

couchbase.upsert( 'half-pipe', user );

reinflatedUser = couchbase.get( id="half-pipe", inflateTo='CustomUser' );

writeOutput( reinflatedUser.getFirstName() );
writeOutput( reinflatedUser.getLastName() );
writeOutput( reinflatedUser.getAge() );

Last updated