# TypeError: Object of type Product is not JSON serializable

- **ID:** `python/flask-jsonify-non-serializable-object`
- **Domain:** python
- **Category:** type_error
- **Verification:** ai_generated
- **Fix Rate:** 80%

## Root Cause

在 Flask 的 JSON 响应中直接返回了自定义对象（如 ORM 模型），而 Flask 默认的 JSON 编码器无法处理非基本类型。

## Version Compatibility

| Version | Status | Introduced | Deprecated |
|---------|--------|------------|------------|
| 3.x | active | — | — |

## Workarounds

1. **** (95% success)
   ```
   class CustomJSONEncoder(JSONEncoder):
    def default(self, obj):
        if isinstance(obj, Product):
            return {'id': obj.id, 'name': obj.name}
        return super().default(obj)
app.json_encoder = CustomJSONEncoder
   ```
2. **** (90% success)
   ```
   from marshmallow import Schema, fields
class ProductSchema(Schema):
    id = fields.Int()
    name = fields.Str()
product_schema = ProductSchema()
return product_schema.dump(product)
   ```

## Dead Ends

- **** — 虽然可以避免报错，但输出的 JSON 是对象的字符串表示，丢失了字段结构，前端无法使用。 (70% fail)
- **** — json.dumps 同样无法处理自定义对象，会抛出相同的 TypeError，即使使用 default 参数也很难正确处理复杂模型。 (90% fail)
- **** — 如果对象包含关联对象或日期时间等类型，手动转换容易遗漏或出错，导致后续序列化失败或数据不完整。 (60% fail)
