我指定了以下型号
type Item struct {
gorm.Model
Name string
Category ItemCategory
}
type ItemCategory struct {
gorm.Model
Name string
}
序列化项目后,我想要:
{
"id": 1,
"name": "Item name",
"category_id": 1
}
而不是嵌入整个类别。有没有办法自定义序列化器?
针对您的用例,有不同的序列化/反序列化接口,但如果您正在寻找 JSON,这可能会有所帮助:
https://pkg.go.dev/github.com/hazelcast/hazelcast-go-client/serialization#JSON
基本上你需要实现
func (j JSON) MarshalJSON() ([]byte, error)
,它会变成这样:
func (i Item) MarshalJSON() ([]byte, error) {
m = map[string]any{
"id": i.Id,
"name": i.Name,
"category_id": i.Category.Id,
}
return json.Marshal(m)
}
除此之外,一般而言 注意 不要将数据库模型与在函数之间传递或想要返回给用户的 DTO 混合,请始终将它们分开。