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
Was this helpful?