Add XCode skills for entity caching, ORM, and sharding ETL
|
---
applyTo: "**/Serialization/**"
---
# åºåˆ—化模å—开呿Œ‡ä»¤
适用于 `NewLife.Serialization` 命å空间下的åºåˆ—化开å‘。
---
## 1. 架构分层
| 层级 | 说明 |
|------|------|
| æ‰©å±•æ–¹æ³•å…¥å£ | `JsonHelper`(`ToJson`/`ToJsonEntity`)ã€`XmlHelper` |
| JSON 宿主 | `IJsonHost` → `FastJson`(默认)/ `SystemJson`(å¯åˆ‡æ¢ï¼‰ |
| 二进制åºåˆ—化 | `Binary` 类,Handler 链å¼å¤„ç† |
| Span åºåˆ—化 | `SpanSerializer`,零分é…高性能 |
| 接å£å±‚ | `IFormatterX`(通用)ã€`IBinary`(二进制)ã€`IJsonHost`(JSON) |
---
## 2. JSON åºåˆ—化规范
### 2.1 统一入å£
- **åºåˆ—化**:`obj.ToJson()` æ‰©å±•æ–¹æ³•ï¼Œç¦æ¢ç›´æŽ¥æž„é€ `JsonWriter`
- **ååºåˆ—化**:`json.ToJsonEntity<T>()` 或 `json.ToJsonEntity(type)`
- **æ ¼å¼åŒ–**:`JsonHelper.Format(json)` æ ¼å¼åŒ–美化
### 2.2 选项控制
```csharp
// 通过 JsonOptions 控制行为
obj.ToJson(new JsonOptions { Indented = true, NullValue = false, CamelCase = true });
// 或快æ·å‚æ•°
obj.ToJson(indented: true, nullValue: false, camelCase: true);
```
### 2.3 IJsonHost 切æ¢
- `JsonHelper.Default` 默认为 `FastJson`(NewLife 内置高性能实现)
- éœ€è¦ `System.Text.Json` 兼容性时å¯åˆ‡æ¢ `SystemJson`
- 自定义时实现 `IJsonHost` 接å£å¹¶èµ‹å€¼ç»™ `JsonHelper.Default`
---
## 3. Binary åºåˆ—化规范
### 3.1 æ ¸å¿ƒå±žæ€§ï¼ˆå¿…é¡»ç†è§£ï¼‰
| 属性 | 默认 | 说明 |
|------|------|------|
| `EncodeInt` | `false` | 7ä½ç¼–ç 压缩整数(å˜é•¿ç¼–ç ,å°å€¼çœç©ºé—´ï¼‰ |
| `IsLittleEndian` | `true` | å—节åºï¼Œä¸Žç¡¬ä»¶é€šä¿¡æ—¶æ³¨æ„ |
| `SizeWidth` | `0` | 集åˆ/å—ç¬¦ä¸²é•¿åº¦å—æ®µå®½åº¦ï¼š0/1/2/4 å—节 |
| `TrimZero` | `false` | å—ç¬¦ä¸²æ˜¯å¦æˆªæ–é›¶å—节 |
| `UseRef` | `false` | 引用关系åºåˆ—åŒ–ï¼ˆå¤æ‚对象图) |
| `FullTime` | `false` | DateTime 用 8 å—节完整时间还是 4 å—节秒数 |
| `Version` | `null` | å议版本,影å“读写行为 |
### 3.2 Handler 扩展
Binary 使用处ç†å™¨é“¾ï¼Œé€šè¿‡ `AddHandler<T>()` æ·»åŠ è‡ªå®šä¹‰å¤„ç†å™¨ï¼š
- 处ç†å™¨å®žçް `IBinaryHandler`,覆盖 `Write`/`TryRead`
- 优先级数值越å°è¶Šå…ˆæ‰§è¡Œ
- 内置处ç†å™¨ï¼š`BinaryGeneral`ã€`BinaryNormal`ã€`BinaryComposite`ã€`BinaryList`ã€`BinaryDictionary`
---
## 4. SpanSerializer 规范(高性能场景)
- 适用于 IoT åè®®ã€ç½‘络帧ç‰é›¶åˆ†é…场景
- ç›®æ ‡ç±»åž‹å®žçŽ° `ISpanSerializable` 接å£
- åºåˆ—化:`SpanSerializer.Serialize(obj)` 返回 `IOwnerPacket`(需 `Dispose` 归还缓冲区)
- ååºåˆ—化:`SpanSerializer.Deserialize<T>(span)`
- `SpanWriter`/`SpanReader` 为底层 Span 读写工具
---
## 5. 常è§é”™è¯¯
- ⌠JSON ååºåˆ—åŒ–æœªå¤„ç† `null` 返回值
- ⌠Binary åºåˆ—åŒ–åŒæ–¹ `IsLittleEndian`/`SizeWidth` ä¸ä¸€è‡´å¯¼è‡´åè®®ä¸åŒ¹é…
- ⌠`IOwnerPacket` 未 `Dispose` 导致 ArrayPool 泄æ¼
- ⌠在çƒç‚¹è·¯å¾„用 `ToJson()` 生æˆä¸´æ—¶å—符串(应考虑 `SpanSerializer` 或 `Binary`)
|