add json serializable interface