### 1、涉及数字的编码码特性：



| 特性 | 描述 | 备注 |
| -------- | -------- | -------- |
| Read_AllowZeroLeadingNumbers     | 读取时允许零开头的数字     | 例：`00.1`     |
| Read_UseBigDecimalMode     | 读取使用大数字模式，用 BigDecimal 替代 Double     |       |
| Read_UseBigIntegerMode     | 读取使用大整型模式，用 BigInteger 替代 Long     |       |
| | | |
| Write_NullNumberAsZero     | 写入数字为 null 时转为 0                  | 例：`null` -> `0`     |
| Write_BooleanAsNumber     | 写入布尔时转为数字                         |  例：`false` -> `0`     |
| Write_NumberTypeSuffix     | 写入数字类型                                   |  例：`0.1D`（不符合 json 规范）     |
| Write_NumbersAsString      | 写入数字时使用字符串模式                  | 例：`0` -> `"0"`      |
| Write_LongAsString            | 写入长整型时使用字符串模式               |  例：`0L` -> `"0"`      |
| Write_DoubleAsString          | 写入双精度浮点数时使用字符串模式     |   例：`0D` -> `"0"`     |
| Write_BigDecimalAsPlain      | 写入大数时使用 plain 模式 | 默认为 `toString()` 处理 |


常见的 web 开发中，javascript 不支持 long 和 double （只支持 int 和 float），建议转成 string。


### 2、主要控制方式有两种：



| 方式         | 描述             | 影响范围     |
| -------- | ---------- | --------- |
| A             | 选项特性        |             |
| B             | 值字段特性     | 当前字段     |

示例1：方式A

```java
Options options = Options.of(Feature.Write_LongAsString, Feature.Write_DoubleAsString);
ONode.serialize(data, options);
```

示例2：方式B

```java
public class Data {
    @ONodeAttr(features = Feature.Write_LongAsString)
    long orderId;
}

ONode.serialize(new Data(), options);
```

