通过Marshaler和Unmarshaler接口,可以自定义序列化和反序列化时需要执行的操作。
// #encoding/json/encode.go// Marshaler is the interface implemented by types that// can marshal themselves into valid JSON.type Marshaler interface {MarshalJSON() ([]byte, error)}// #encoding/json/decode.go// Unmarshaler is the interface implemented by types// that can unmarshal a JSON description of themselves.// The input can be assumed to be a valid encoding of// a JSON value. UnmarshalJSON must copy the JSON data// if it wishes to retain the data after returning.//// By convention, to approximate the behavior of Unmarshal itself,// Unmarshalers implement UnmarshalJSON([]byte("null")) as a no-op.type Unmarshaler interface {UnmarshalJSON([]byte) error}
TextMarshaler与Marshaler类似,优先级比Marshaler低。返回的是文本内容,不需要自己添加双引号。
// #encoding/encoding.go// TextMarshaler is the interface implemented by an object that can// marshal itself into a textual form.//// MarshalText encodes the receiver into UTF-8-encoded text and returns the result.type TextMarshaler interface {MarshalText() (text []byte, err error)}// TextUnmarshaler is the interface implemented by an object that can// unmarshal a textual representation of itself.//// UnmarshalText must be able to decode the form generated by MarshalText.// UnmarshalText must copy the text if it wishes to retain the text// after returning.type TextUnmarshaler interface {UnmarshalText(text []byte) error}
BinaryMarshaler 是由一个对象实现的接口,它可以将自己编组为二进制形式。
MarshalBinary 将接收器编码为二进制形式并返回结果。
// #encoding/encoding.go// BinaryMarshaler is the interface implemented by an object that can// marshal itself into a binary form.//// MarshalBinary encodes the receiver into a binary form and returns the result.type BinaryMarshaler interface {MarshalBinary() (data []byte, err error)}// BinaryUnmarshaler is the interface implemented by an object that can// unmarshal a binary representation of itself.//// UnmarshalBinary must be able to decode the form generated by MarshalBinary.// UnmarshalBinary must copy the data if it wishes to retain the data// after returning.type BinaryUnmarshaler interface {UnmarshalBinary(data []byte) error}
