func (b *InnerJSONBuilder) RemoveByNames(names ...string) *InnerJSONBuilder {
	for _, name := range names {
		info := b._structPropertyMap[name]
		if info == nil {
			continue
		}
		delete(b._properties, info.fieldName)
	}
	return b
}
RemoveByNames remove properties to InnerJSONBuilder by struct property name. if name is not in the builder, it will ignore.
package g
import (
	"encoding/json"
)
type InnerJSON struct {
	A string `json:"a,omitempty"`
}
type InnerJSONList []*InnerJSON
type InnerPropertyEncoder func(src *Inner, dest *InnerJSON) error
type InnerPropertyDecoder func(src *InnerJSON, dest *Inner) error
type InnerPropertyInfo struct {
	fieldName string
	jsonName  string
	Encoder   InnerPropertyEncoder
	Decoder   InnerPropertyDecoder
}
func (info *InnerPropertyInfo) FieldName() string {
	return info.fieldName
}
func (info *InnerPropertyInfo) JSONName() string {
	return info.jsonName
}
type InnerJSONBuilder struct {
	_properties        map[string]*InnerPropertyInfo
	_jsonPropertyMap   map[string]*InnerPropertyInfo
	_structPropertyMap map[string]*InnerPropertyInfo
	A                  *InnerPropertyInfo
}
func NewInnerJSONBuilder() *InnerJSONBuilder {
	jb := &InnerJSONBuilder{
		_properties:        map[string]*InnerPropertyInfo{},
		_jsonPropertyMap:   map[string]*InnerPropertyInfo{},
		_structPropertyMap: map[string]*InnerPropertyInfo{},
		A: &InnerPropertyInfo{
			fieldName: "A",
			jsonName:  "a",
			Encoder: func(src *Inner, dest *InnerJSON) error {
				if src == nil {
					return nil
				}
				dest.A = src.A
				return nil
			},
			Decoder: func(src *InnerJSON, dest *Inner) error {
				if src == nil {
					return nil
				}
				dest.A = src.A
				return nil
			},
		},
	}
	jb._structPropertyMap["A"] = jb.A
	jb._jsonPropertyMap["a"] = jb.A
	return jb
}
func (b *InnerJSONBuilder) Properties() []*InnerPropertyInfo {
	return []*InnerPropertyInfo{
		b.A,
	}
}
func (b *InnerJSONBuilder) AddAll() *InnerJSONBuilder {
	b._properties["A"] = b.A
	return b
}
func (b *InnerJSONBuilder) Add(infos ...*InnerPropertyInfo) *InnerJSONBuilder {
	for _, info := range infos {
		b._properties[info.fieldName] = info
	}
	return b
}
func (b *InnerJSONBuilder) AddByJSONNames(names ...string) *InnerJSONBuilder {
	for _, name := range names {
		info := b._jsonPropertyMap[name]
		if info == nil {
			continue
		}
		b._properties[info.fieldName] = info
	}
	return b
}
func (b *InnerJSONBuilder) AddByNames(names ...string) *InnerJSONBuilder {
	for _, name := range names {
		info := b._structPropertyMap[name]
		if info == nil {
			continue
		}
		b._properties[info.fieldName] = info
	}
	return b
}
func (b *InnerJSONBuilder) Remove(infos ...*InnerPropertyInfo) *InnerJSONBuilder {
	for _, info := range infos {
		delete(b._properties, info.fieldName)
	}
	return b
}
func (b *InnerJSONBuilder) RemoveByJSONNames(names ...string) *InnerJSONBuilder {
	for _, name := range names {
		info := b._jsonPropertyMap[name]
		if info == nil {
			continue
		}
		delete(b._properties, info.fieldName)
	}
	return b
}