package main
import (
"encoding/json"
"fmt"
"time"
)
// 自定义类型
type MyTime struct {
Time time.Time
}
// 实现json.Marshaler接口的MarshalJSON方法
func (mt MyTime) MarshalJSON() ([]byte, error) {
return json.Marshal(mt.Time.Format("2006 - 01 - 02 15:04:05"))
}
// 实现json.Unmarshaler接口的UnmarshalJSON方法
func (mt *MyTime) UnmarshalJSON(data []byte) error {
var s string
if err := json.Unmarshal(data, &s); err != nil {
return err
}
t, err := time.Parse("2006 - 01 - 02 15:04:05", s)
if err != nil {
return err
}
mt.Time = t
return nil
}
// 包含自定义类型字段的结构体
type MyStruct struct {
MyTimeField MyTime
}
func main() {
// 示例数据
myTime := MyTime{Time: time.Now()}
myStruct := MyStruct{MyTimeField: myTime}
// 序列化
serialized, err := json.MarshalIndent(myStruct, "", " ")
if err != nil {
fmt.Println("序列化错误:", err)
return
}
fmt.Println("序列化结果:\n", string(serialized))
// 反序列化
var unmarshaled MyStruct
if err := json.Unmarshal(serialized, &unmarshaled); err != nil {
fmt.Println("反序列化错误:", err)
return
}
fmt.Println("反序列化结果:", unmarshaled.MyTimeField.Time)
}