func (b *PersonJSONBuilder) RemoveByNames(names ...string) *PersonJSONBuilder {
	for _, name := range names {
		info := b._structPropertyMap[name]
		if info == nil {
			continue
		}
		delete(b._properties, info.fieldName)
	}
	return b
}
RemoveByNames remove properties to PersonJSONBuilder by struct property name. if name is not in the builder, it will ignore.
package i
import (
	"encoding/json"
)
type PersonJSON struct {
	Name     string `json:"name,omitempty"`
	Age      int    `json:"age,omitempty"`
	Password string `json:"password,omitempty"`
}
type PersonJSONList []*PersonJSON
type PersonPropertyEncoder func(src *Person, dest *PersonJSON) error
type PersonPropertyDecoder func(src *PersonJSON, dest *Person) error
type PersonPropertyInfo struct {
	fieldName string
	jsonName  string
	Encoder   PersonPropertyEncoder
	Decoder   PersonPropertyDecoder
}
func (info *PersonPropertyInfo) FieldName() string {
	return info.fieldName
}
func (info *PersonPropertyInfo) JSONName() string {
	return info.jsonName
}
type PersonJSONBuilder struct {
	_properties        map[string]*PersonPropertyInfo
	_jsonPropertyMap   map[string]*PersonPropertyInfo
	_structPropertyMap map[string]*PersonPropertyInfo
	Name               *PersonPropertyInfo
	Age                *PersonPropertyInfo
	Password           *PersonPropertyInfo
}
func NewPersonJSONBuilder() *PersonJSONBuilder {
	jb := &PersonJSONBuilder{
		_properties:        map[string]*PersonPropertyInfo{},
		_jsonPropertyMap:   map[string]*PersonPropertyInfo{},
		_structPropertyMap: map[string]*PersonPropertyInfo{},
		Name: &PersonPropertyInfo{
			fieldName: "Name",
			jsonName:  "name",
			Encoder: func(src *Person, dest *PersonJSON) error {
				if src == nil {
					return nil
				}
				dest.Name = src.Name
				return nil
			},
			Decoder: func(src *PersonJSON, dest *Person) error {
				if src == nil {
					return nil
				}
				dest.Name = src.Name
				return nil
			},
		},
		Age: &PersonPropertyInfo{
			fieldName: "Age",
			jsonName:  "age",
			Encoder: func(src *Person, dest *PersonJSON) error {
				if src == nil {
					return nil
				}
				dest.Age = src.Age
				return nil
			},
			Decoder: func(src *PersonJSON, dest *Person) error {
				if src == nil {
					return nil
				}
				dest.Age = src.Age
				return nil
			},
		},
		Password: &PersonPropertyInfo{
			fieldName: "Password",
			jsonName:  "password",
			Encoder: func(src *Person, dest *PersonJSON) error {
				if src == nil {
					return nil
				}
				dest.Password = src.Password
				return nil
			},
			Decoder: func(src *PersonJSON, dest *Person) error {
				if src == nil {
					return nil
				}
				dest.Password = src.Password
				return nil
			},
		},
	}
	jb._structPropertyMap["Name"] = jb.Name
	jb._jsonPropertyMap["name"] = jb.Name
	jb._structPropertyMap["Age"] = jb.Age
	jb._jsonPropertyMap["age"] = jb.Age
	jb._structPropertyMap["Password"] = jb.Password
	jb._jsonPropertyMap["password"] = jb.Password
	return jb
}
func (b *PersonJSONBuilder) Properties() []*PersonPropertyInfo {
	return []*PersonPropertyInfo{
		b.Name,
		b.Age,
		b.Password,
	}
}
func (b *PersonJSONBuilder) AddAll() *PersonJSONBuilder {
	b._properties["Name"] = b.Name
	b._properties["Age"] = b.Age
	b._properties["Password"] = b.Password
	return b
}
func (b *PersonJSONBuilder) Add(info *PersonPropertyInfo) *PersonJSONBuilder {
	b._properties[info.fieldName] = info
	return b
}
func (b *PersonJSONBuilder) AddByJSONNames(names ...string) *PersonJSONBuilder {
	for _, name := range names {
		info := b._jsonPropertyMap[name]
		if info == nil {
			continue
		}
		b._properties[info.fieldName] = info
	}
	return b
}
func (b *PersonJSONBuilder) AddByNames(names ...string) *PersonJSONBuilder {
	for _, name := range names {
		info := b._structPropertyMap[name]
		if info == nil {
			continue
		}
		b._properties[info.fieldName] = info
	}
	return b
}
func (b *PersonJSONBuilder) Remove(info *PersonPropertyInfo) *PersonJSONBuilder {
	delete(b._properties, info.fieldName)
	return b
}
func (b *PersonJSONBuilder) RemoveByJSONNames(names ...string) *PersonJSONBuilder {
	for _, name := range names {
		info := b._jsonPropertyMap[name]
		if info == nil {
			continue
		}
		delete(b._properties, info.fieldName)
	}
	return b
}