@Override
    public byte[] encoding(IData4Coding data) throws NoConfigException {
        Bytes encodedData = new Bytes();
        List<Class<? extends Object>> allTypes = data.allConfigs();
        this.sortBySize(allTypes);
        for (Class<? extends Object> clazz : allTypes) {
        	encodedData.append((byte) TypeSize.val(clazz.getSimpleName()).size());
            List<? extends Object> values = data.query(clazz);
            encodedData.append(BytesUtils.encodeInt(values.size()));
            for(Object value : values) {
            	if (value instanceof Byte) {
            		encodedData.append((byte) value);
            	} else if (value instanceof String) {
            		byte[] encodedString = BytesUtils.encodeString((String) value);
            		encodedData.append(BytesUtils.encodeInt(encodedString.length));
            		encodedData.append(encodedString);
            	} else {
            		this.toBytes(encodedData, value);
            	}
            }
        }
        return encodedData.get();
    }