如何将关系序列化为“ID”而不是嵌入整个结构?

问题描述 投票:0回答:1

我指定了以下型号

type Item struct {
    gorm.Model
    Name     string
    Category ItemCategory
}

type ItemCategory struct {
    gorm.Model
    Name string
}

序列化项目后,我想要:

{
  "id": 1,
  "name": "Item name",
  "category_id": 1
}

而不是嵌入整个类别。有没有办法自定义序列化器?

go orm go-gorm
1个回答
0
投票

针对您的用例,有不同的序列化/反序列化接口,但如果您正在寻找 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 混合,请始终将它们分开。

© www.soinside.com 2019 - 2024. All rights reserved.