add JSON serialization support