タイトルのまんまですが結構はまったのでメモ。
Model内に直接書くとちゃんとコールバックが実行されるので
beforeSaveとafterFindを両方書いた
[cc lang=’php’ ]
class ExsampleModel extends AppModel {
	/**
	* モデル名
	* @access	public
	*/
	public $name	 = ‘ExsampleModel’;
 	/**
 	* シリアライズされたカラム名
	* @access	public
	*/
	public $serializedFields = array (
		‘fieldName’,
	);
	/**
	* 保存用にデータをシリアライズする
	*
	*/
	public function beforeSave() {
		foreach ($this->serializedFields as $field) {
			if (isset ($this->data[$this->name][$field])) {
				$this->data[$this->name][$field] = serialize ($this->data[$this->name][$field]);
			}
		}
		return TRUE;
	}
	/**
	* シリアライズされたカラムを戻す
	*
	*/
	public function afterFind($results) {
		foreach ($results as $key => $val) {
			foreach ($this->serializedFields as $field) {
				if (isset ($results[$key][$this->name][$field]) && is_array ($results[$key][$this->name])) {
					$results[$key][$this->name][$field] = unserialize ($results[$key][$this->name][$field]);
				}
			}
		}
		return $results;
	}
}
[/cc]
こんな感じ。