解决MySql布尔型新旧版本兼容问题,采用枚举来表示布尔型的数据表。由正向工程赋值
大石头 authored at 2018-05-15 21:21:05
2.01 KiB
X
# 数据包编码器IPacketEncoder ## 概述 `IPacketEncoder` 是 NewLife.Core 中对象与数据包(`IPacket`)之间双向转换的编码器接口。与 `PacketCodec`(网络粘包处理)不同,`IPacketEncoder` 关注的是"对象 ↔ 字节包"的序列化转换,支持多种类型的自动编码策略选择。 **命名空间**:`NewLife.Data` **文档地址**:https://newlifex.com/core/packet_encoder ## 核心接口 ```csharp public interface IPacketEncoder { /// <summary>将对象编码为数据包</summary> IPacket? Encode(Object? value); /// <summary>将数据包解码为指定类型的对象</summary> Object? Decode(IPacket data, Type type); } public static class PacketEncoderExtensions { /// <summary>泛型解码扩展</summary> public static T? Decode<T>(this IPacketEncoder encoder, IPacket data); } ``` ## 默认实现 DefaultPacketEncoder `DefaultPacketEncoder` 根据对象类型自动选择编码策略: | 类型 | 编码策略 | |------|----------| | 基础类型(Int32、Double 等) | 直接转换为字符串再转 UTF-8 字节数组 | | `String` | 直接转 UTF-8 字节数组 | | `DateTime` | 格式化为 `yyyy-MM-dd HH:mm:ss.fff` | | `IPacket` | 直接返回或适配 | | `Byte[]` | 包装为 `ArrayPacket` | | `IAccessor`(访问器) | 调用 `ToPacket()` 方法 | | 复杂类型 | 使用 JSON 序列化 | ## 快速开始 ```csharp using NewLife.Data; var encoder = new DefaultPacketEncoder(); // 编码 var data = encoder.Encode("Hello, World!"); var numData = encoder.Encode(12345); // 解码 var str = encoder.Decode<String>(data); var num = encoder.Decode<Int32>(numData); ``` ## 与 PacketCodec 的区别 | 特性 | `IPacketEncoder` | `PacketCodec` | |------|------------------|---------------| | 职责 | 对象 ↔ 数据包转换 | TCP 粘包拆包 | | 输入 | 任意对象 | 网络字节流 | | 输出 | 完整数据包 | 完整数据包集合 | | 状态 | 无状态 | 有状态(缓存) | | 命名空间 | `NewLife.Data` | `NewLife.Messaging` |