跳到主要内容

v4.1.14(13,12,11,10)

更新日期: 2026.3.21

更新描述:

  • HTTP 全面 Pipeline 直读重构:移除 HttpClientDataHandlingAdapterHttpServerDataHandlingAdapter 两个适配器类,HttpSessionClient 改为直接基于 PipeReader 解析 HTTP 请求(HttpPipelineLoopAsync);零适配器开销,支持 Body 流式读取。
  • WebSocket 全面 Pipeline 重构InternalWebSocket 继承 SafetyDisposableObject,接收循环改为基于 InternalReadAsyncWebSocketPipelineLoopAsync(直接读取 PipeReader)。
  • EventArgs 对象复用优化MemoryEventArgsBytesReaderEventArgsReceivedDataEventArgsSendingEventArgs 构造函数改为 SetData/ReSetData 方法,支持对象复用;TcpClientBaseTcpSessionClientBaseNamedPipeClientBaseSerialPortClientBase 均新增预分配事件参数字段,大幅降低 GC 压力。
  • UDP 接收循环健壮性改进StopAsync 先设置 Stopped 状态再 Dispose Socket,修复 NullReferenceException;接收循环区分非致命错误(ConnectionReset 等,继续循环)与致命错误,新增 ObjectDisposedException 正常退出处理。
  • Dmtp 发送优化DmtpActor 新增 MaxPackageSize 属性限制包大小;SendAsync 优先使用 TransportWriter 直接 Pipeline 写入,减少内存分配。
  • TcpService 修复:接受新连接前增加服务运行状态检查,避免服务停止后仍处理新连接。

更新详情:

TouchSocket.Core

  •   ByteBlock在扩容时,如果已被释放,则有无限循环的问题,尽管该问题是由错误使用导致的。

TouchSocket

  •   TcpClientBase 新增预分配事件参数字段(BytesReaderEventArgsReceivedDataEventArgsSendingEventArgs),避免每次触发事件时分配新对象,降低 GC 压力。
  •   UdpSessionBase 接收循环错误处理增强:区分非致命 Socket 错误(如 Windows ICMP ConnectionReset,记录日志后继续循环)与致命错误;新增 ObjectDisposedException 捕获分支(正常退出);服务已停止时各异常分支均安全退出。

TouchSocket.Http

  •   HttpSessionClient 覆盖 ReceiveLoopAsync,通过 HttpPipelineLoopAsync 直接基于 PipeReader 解析 HTTP 请求头并处理 Body,不再使用适配器机制;HttpContextEventArgsServerHttpRequest 实例复用,避免每次请求分配对象。
  •   HttpService 在极端情况下,Close会死锁的bug。
  •   IHttpSessionClient 接口新增 SwitchProtocolAsync() 方法,检测 HTTP 升级请求后退出 HTTP 解析循环并返回底层 ITransport,用于自定义协议直接读写。

TouchSocket.Http(WebSocket)

  •   InternalWebSocket 继承 SafetyDisposableObject,构造函数新增 ITransport transportbool autoReceive 参数;接收循环迁移至 InternalReadAsync(基于 PipeReader 帧解析)。
  •   IWebSocket.AllowAsyncRead 属性,及 IDisposable 继承;WebSocket 读取模式改为通过 autoReceive 参数控制。⚠️ 破坏性变更
  •   HttpSessionClient.SwitchProtocolToWebSocketAsync 参数由 HttpContext httpContext 改为 bool autoReceive,WebSocket 接收循环迁移至 WebSocketPipelineLoopAsync(基于 ITransport 读取)。⚠️ 破坏性变更
  •   WebSocketClientBase 移除默认构造函数中预分配 InternalWebSocket,改在 ProtectedWebSocketConnectAsync 建立连接时创建(含 ITransportautoReceive 参数)。
  •   ProtectedWebSocketConnectAsync 新增 bool autoReceive 参数。⚠️ 破坏性变更
  •   WebSocketReceiveResult 移除 ReadLease<WSDataFrame>,改为直接持有 WSDataFrame 并新增 IsCompleted 属性;构造函数签名变为 (WSDataFrame, string, bool)。⚠️ 破坏性变更
  •   WebSocketExtension.ReadStringAsync/ReadBinaryAsync 移除对 AllowAsyncRead 的前置校验,调用方无需显式启用即可使用异步读取扩展方法。

TouchSocket.NamedPipe

  •   NamedPipeClientBase 新增预分配事件参数字段(BytesReaderEventArgsReceivedDataEventArgsSendingEventArgs),与 TCP 对齐。
  •   NamedPipeClientBase 暴露 Transport 属性,返回底层 ITransport 对象。
  •   NamedPipeClientBase.RunSessionAsync 重构会话生命周期管理,统一 try/catch/finally 结构。
  •   NamedPipeClient.ConnectAsync 内部方法由 PipeConnectAsync 重命名为 NamedPipeConnectAsync

TouchSocket.SerialPorts

  •   SerialPortClientBase 新增预分配事件参数字段,会话生命周期管理与 TCP/NamedPipe 对齐。

TouchSocket.Dmtp

  •   DmtpActor.MaxPackageSize 属性,用于限制单次发送的最大包大小(字节),超限时抛出 ArgumentOutOfRangeException
  •   DmtpActor.SendAsync 优先检测 TransportWriter,存在时直接通过 PipeBytesWriter 写入底层管道,避免 SegmentedBytesWriter 中间分配。
  •   DmtpActor.TransportWriter 属性从 init 改为 set,支持初始化后修改。
  •   HttpDmtpSessionClient 协议升级改用 SwitchProtocolAsync() 获取 ITransport,引入 DmtpPipelineLoopAsync 管道读取循环;DmtpAdapter 实例改为字段复用(m_dmtpAdapter)。
  •   DmtpActor.BuildPackage<TWriter> 私有泛型方法,统一封装 Dmtp 包构建逻辑。

v4.1.9(8)

更新日期: 2026.3.15

更新描述:

  • JsonRpc 序列化全面重构:引入 JsonRpcConverter,基于 Utf8JsonWriter/Utf8JsonReader 直接读写协议,消除中间字符串分配,支持 AOT;JsonRpcOption 大幅简化,移除 SerializerConverter 系列 API,改为统一的 SerializerOptions(JsonSerializerOptions)
  • RouterPackage 命名空间迁移RouterPackageMsgRouterPackageWaitRouterPackageIReadonlyRouterPackage 迁移至 TouchSocket.Dmtp 命名空间;TouchSocketPro.Dmtp 中 RouterPackage 功能命名空间由 RouterPackage 改为 RouterPackages,完整重构文件结构。
  • TCP 关闭机制重构TcpClientBaseTcpSessionClientBase 均以 Interlocked.CompareExchange 原子标志替代 SemaphoreSlim 保护并发关闭,统一使用 RunSessionAsync(try/catch/finally)管理会话生命周期,接收循环新增 IsCanceled 检查,修复连接已关闭但循环仍阻塞等待的问题。
  • HTTP 静态文件热更新精确化FolderEntry 重构为完整文件系统监控类,支持按子目录粒度精确失效,避免全量重载,资源释放实现 IDisposable

更新详情:

TouchSocket.Core

  •   ByteBlock.ExtendSize / ValueByteBlock.ExtendSize 逻辑调整:将"不支持扩容"的异常检测移入 FreeLength < size 分支内,只在真正需要扩容且无扩容支持时才抛出,避免误报。

TouchSocket

  •   TcpClientBase.CloseAsync 引入 m_closeFlag 原子整数(Interlocked.CompareExchange),替代原有的信号量保护,彻底消除并发关闭时的死锁风险。
  •   TcpClientBase 接收循环:将 ReadLocker.CurrentCount < 1 判断改为 WaitAsync(0) 非阻塞检测;新增 result.IsCanceled 短路分支,修复底层通道取消后循环仍阻塞等待下一次读取的问题。
  •   TcpSessionClientBase.CloseAsync 同步引入 m_closeFlag 原子标志,移除 m_closeSemaphoreSemaphoreSlim),简化关闭路径;SafetyDispose 移除对 m_closeSemaphore.Dispose() 的调用。
  •   TcpSessionClientBase.m_dataHandlingAdapter 字段添加 volatile 修饰,避免多线程可见性问题。

TouchSocket.Dmtp

  •   TouchSocket.Dmtp.Routers 模块(迁移自 TouchSocket.Core):包含 RouterPackageMsgRouterPackageWaitRouterPackageIReadonlyRouterPackage,命名空间由 TouchSocket.Core 变更为 TouchSocket.Dmtp。⚠️ 破坏性变更

TouchSocket.Http

  •   FolderEntry 从简单 HashSet<string> 重构为完整文件系统监控类,内置 FileSystemWatcher,按物理子目录粒度精确跟踪文件增删改及重命名事件,引入 ConcurrentDictionary<string, HashSet<string>> 实现线程安全的目录-键映射,支持 IDisposable 资源释放。
  •   StaticFilesPool 热更新策略从全量重载改为按受影响子目录精确失效,大幅减少文件变更时的重载开销。

TouchSocket.JsonRpc

  •   引入 JsonRpcConverter 类,基于 Utf8JsonWriter / Utf8JsonReader 直接序列化/反序列化 JsonRpc 协议消息,零中间字符串分配,原生支持 AOT。
  •   JsonRpcRequestConverterJsonRpcWaitResultConverter 两个旧版 JsonConverter<T>,由 JsonRpcConverter 统一接管。⚠️ 破坏性变更
  •   JsonRpcActor 使用 JsonRpcConverter 替代旧转换器;新增 SerializerOptionsJsonSerializerOptions)属性,供参数序列化与响应反序列化复用。
  •   JsonRpcOption 大幅简化:移除 SerializerConverterClearAllFormattersConfigureAdvancedUseCustomFormatterUseDefaultJsonFormatterUseSystemTextJsonFormatter 等 API,改为直接暴露 SerializerOptionsJsonSerializerOptions)。⚠️ 破坏性变更
  •   InternalJsonRpcRequest 移除 ParamsStrings 属性,参数现直接通过 JsonRpcConverter.WriteRequest 写入。
  •   JsonRpcActor.Dispose 实现,释放 RpcDispatcher

TouchSocket.Mqtt

  •   MqttMessage 新增 CreatePropertiesWriter<TWriter> 辅助方法,用于 MQTT V5 属性块的内存申请,语义更清晰。
  •   MQTT V5 全系消息(MqttConnAckMessageMqttConnectMessageMqttPublishMessage 等)属性块写入由 CreateVariableWriter 改为 CreatePropertiesWriter
  •   ReconnectionOptionsExtensionConfigureAwait(false) 改为 ConfigureDefaultAwait()

TouchSocketPro.Dmtp

  •   RouterPackage 功能命名空间由 TouchSocket.Dmtp.RouterPackage 改为 TouchSocket.Dmtp.RouterPackages(注意末尾加 s),文件全面重组。⚠️ 破坏性变更

v4.1.6(7)

更新日期: 2026.3.7

更新描述:

  • WriterExtension 分块写入优化:引入梯度递增块大小策略(初始 4096,每 10 次迭代翻倍,上限 512KB),覆盖内存池各档位,兼顾小数据效率与大数据吞吐量。
  • Metadata JSON 序列化支持:新增 MetadataJsonConverterMetadata 类支持与 System.Text.Json 协同工作,序列化为 Key/Value 对象数组格式。
  • Dmtp 通道高性能重构:NET6.0+ 平台 InternalChannel 改用 System.Threading.Channels.Channel<T> 实现,移除 SemaphoreSlim + Queue 组合,显著提升并发吞吐;通道包未消费时正确释放资源。
  • HttpResponse 字符串写入优化:新增 WriteAsync(string) 重载,使用分段写入避免大字符串一次性分配,降低内存占用和 GC 压力。
  • WebSocket 握手失败修复:握手拒绝或协议不匹配时改用 EasyTask.SafeNewRun 异步关闭,避免潜在死锁。
  • SerialCore 串口接收修复:使用 SegmentedPipe 替代 CircularBuffer<byte> 处理串口事件数据,修复高频事件驱动场景下的异常关闭问题。

更新详情:

TouchSocket.Core

  •   WriterExtension 分块写入策略升级:引入 InitialChunkSize=4096MaxChunkSize=512KBChunkSizeDoubleInterval=10 常量,写入块大小每经过 10 次迭代翻倍,自适应覆盖内存池各档位,提升大数据吞吐量。
  •   MetadataJsonConverter 类,实现 JsonConverter<Metadata>,支持将 Metadata 序列化为 Key/Value 对象数组的 JSON 格式,并可正确反序列化。
  •   Metadata 类添加 [JsonConverter(typeof(MetadataJsonConverter))] 特性,开箱即用支持 System.Text.Json 序列化。

TouchSocket.Dmtp

  •   InternalChannel 拆分为 InternalChannel_Net60.cs(NET6.0+)和 InternalChannel_NotNet60.cs 两个部分类,分别针对不同运行时实现最优的通道数据传递。
  •   NET6.0+ 平台 InternalChannel 改用 System.Threading.Channels.Channel<ChannelPackage> 替代 SemaphoreSlim + Queue<ChannelPackage> 组合,实现无锁高并发数据传递,并新增 ReceivedDataAsync 方法。
  •   DmtpActor.QueueChannelPackage 方法重命名为 QueueChannelPackageAsync 并改为异步调用,NET6.0+ 使用异步写入通道,非 NET6.0 平台保持同步。
  •   通道 Id 不存在时,ChannelPackage 现在能正确调用 SafeDispose() 释放资源,避免内存泄漏。
  •   InternalChannel 中抛出的异常类型从 Exception 更改为更具体的 InvalidOperationException

TouchSocket.Http

  •   HttpExtensions.WriteAsync<TResponse>(TResponse response, string message) 重载方法,使用 SegmentedBytesWriter 分段写入字符串,避免一次性将整个字符串转换为字节数组,降低内存占用和 GC 压力。
  •   HttpSessionClient WebSocket 握手失败(协议不正确或被拒绝)时,改用 EasyTask.SafeNewRun 异步执行 CloseAsync,避免在当前异步上下文中同步关闭导致潜在死锁。

TouchSocket.SerialPorts

  •   SerialCore 使用 SegmentedPipe 替代 CircularBuffer<byte> 作为串口事件驱动的数据缓冲区,修复高频事件触发时因 SpinWait + CircularBuffer 竞态导致的异常关闭问题。
  •   SerialCore.SerialCore_DataReceived 写入侧从 SpinWait 循环改为直接 GetMemory/Advance,消除忙等待,降低 CPU 占用。
  •   释放信号量时改用 try/catch SemaphoreFullException 替代 CurrentCount 判断,消除信号量释放的竞态条件。

v4.1.5

更新日期: 2026.3.1

更新描述:

  • 全局异步优化:所有 ConfigureAwait(EasyTask.ContinueOnCapturedContext) 调用统一改为 ConfigureDefaultAwait(),简化代码并提升异步性能表现。
  • PlcBridge驱动器架构重构:引入事件驱动机制替代轮询模式,大幅降低CPU占用率,提升驱动器执行效率。
  • 驱动器执行方法优化:将驱动器的读写方法返回类型从 Task 改为 ValueTask,减少不必要的堆分配。

更新详情:

All

  •   全局异步代码优化,将所有 ConfigureAwait(EasyTask.ContinueOnCapturedContext) 调用统一改为 ConfigureDefaultAwait(),简化代码结构并提升性能。

TouchSocket.Rpc

  •   当服务继承导致rpc方法进行重载时,会直接使用语法错误进行提示。

TouchSocketPro.PlcBridges

  •   引入 DriveRunner 类,采用事件驱动机制(AsyncManualResetEvent)替代传统轮询模式,驱动器仅在有读写请求时才执行,显著降低CPU占用率。
  •   PlcBridgeService.AddDriveAsync 方法优化驱动器添加逻辑:分组驱动器仅在未运行时启动,避免重复启动;独立分组驱动器先添加后启动,确保状态一致。
  •   PlcDrive<TValue> 抽象类中的 ExecuteReadAsyncExecuteWriteAsync 方法返回类型从 Task<Result> 改为 ValueTask<Result>,提升异步性能。
  •   PlcDrive 基类中的 OnExecuteAsync 方法返回类型从 Task<int> 改为 ValueTask<int>
  •   PlcDrive 新增 AsyncManualResetEvent 属性,配合 DriveRunner 实现按需执行机制。
  •   MemoryPlcDrive<TValue> 驱动器调整方法返回类型为 ValueTask<Result>,并使用 EasyValueTask.FromResult 提升性能。
  •   InternalPlcOperator<TValue> 操作类中所有异步等待统一使用 ConfigureDefaultAwait()

v4.1.4

更新日期: 2026.2.25

更新描述:

  • Metadata 类完全重构,不再继承 Dictionary<string, string>,支持超长值按 UTF-8 编码长度自动分段存储。
  • 新增 WriteVarString / ReadVarString 配套方法,提供可变长度编码的字符串序列化支持。
  • 移除 PackageBaseRouterPackage 中的 #if AllowsRefStruct 条件编译指令,简化代码结构。
  • 代码风格优化,多处 switch 语句改用 switch 表达式。

更新详情:

TouchSocket.Core

  •   WriterExtension.WriteVarString<TWriter> 方法,使用 VarUInt32 编码 UTF-8 字节长度(长度+1),支持 null 与空字符串的区分写入。
  •   ReaderExtension.ReadVarString<TReader> 方法,与 WriteVarString 配套,读取可变长度编码的 UTF-8 字符串。
  •   Metadata 类:从继承 Dictionary<string, string> 改为实现 IEnumerable<KeyValuePair<string, string>>,底层存储改为 List<KeyValuePair<string, string>>,支持值超过 254 字节(UTF-8)时自动分段存储与读取合并。

v4.1.2(3)

更新日期: 2026.2.12

更新描述:

  • 【新功能】TouchSocketPro新增Dmtp内网穿透(Relay)功能,支持端口映射和数据转发。
  • MQTT消息分发内存优化,使用引用计数和ArrayPool减少内存分配和GC压力。
  • 多个通信组件连接流程优化,确保事件触发顺序正确。
  • CheckClearPlugin增强日志,提供更详细的调试信息。
  • BytesReader性能优化,修复序列读取和释放逻辑。

更新详情:

TouchSocket.Core

  •   BytesReader.Sequence 属性使用 m_position 而不是 BytesRead,提升读取性能。
  •   BytesReader.Dispose 方法标记为 readonly,符合结构体最佳实践。

TouchSocket.Mqtt

  •   引入 SharedPayload 类支持引用计数的Payload共享,大幅减少内存复制。
  •   MqttArrivedMessage.Payload 类型从 ReadOnlyMemory<byte> 改为 ReadOnlySequence<byte>,支持零拷贝场景。
  •   MqttPublishMessage.Payload 类型从 ReadOnlyMemory<byte> 改为 ReadOnlySequence<byte>,统一内存模型。
  •   DistributeMessage 类,使用 SharedPayload 实现消息分发时的内存共享。
  •   MqttActor 使用 ConcurrentDictionary 替代 Dictionary 存储QoS2消息,提升并发性能。
  •   MqttActor 新增 PooledArrivedMessage 结构体,使用 ArrayPool 管理QoS2消息的内存生命周期。
  •   MqttSessionActor 消息分发流程增加异常处理,确保 SharedPayload 正确释放。
  •   MqttBroker.ForwardMessageAsync 方法返回已分发的订阅者数量,并优化多订阅者场景下的内存共享。
  •   SubscriptionThreadSafeTopicSubscriptions 类从 MqttBroker 中独立出来,提升代码模块化。

TouchSocket

  •   TcpClientBase.PrivateOnConnected 方法调整事件触发顺序:先触发 OnTcpConnected 事件,再启动接收循环。
  •   TcpSessionClientBase.PrivateOnConnected 方法调整事件触发顺序:先触发 OnTcpConnected 事件,再启动接收循环。
  •   CheckClearPlugin 添加详细的Debug和Warning级别日志,便于调试连接清理逻辑。
  •   TcpService 在当接收短链接数据时,无法接收数据。

TouchSocket.NamedPipe

  •   NamedPipeClientBase.PrivateConnected 方法调整事件触发顺序:先触发 OnNamedPipeConnected 事件,再启动接收循环。
  •   NamedPipeSessionClientBase.PrivateConnected 方法调整事件触发顺序:先触发 OnNamedPipeConnected 事件,再启动接收循环。

TouchSocket.SerialPorts

  •   SerialPortClientBase.PrivateConnected 方法调整事件触发顺序:先触发 OnSerialConnected 事件,再启动接收循环。

TouchSocketPro.Dmtp

  •   IDmtpRelayActor 接口,定义Dmtp内网穿透Actor的核心功能。

v4.1.1

更新日期: 2026.2.1

更新描述:

  • JSON序列化优化,新增全局默认配置选项。
  • 重连插件优化重连逻辑和错误处理。
  • HTTP响应增强,修复内容长度校验和流式写入问题。
  • DMTP关闭流程优化,先发送关闭消息再执行关闭。
  • PLC桥接服务修复,驱动运行器正确关联分组信息。

更新详情:

TouchSocket.Core

  •   TouchSocketCoreUtility.IsUrl 方法,使用 Uri.TryCreate 替代正则表达式,提升URL验证性能和准确性。
  •   SerializeConvert.DefaultJsonSerializerOptions 全局默认JSON序列化选项属性,允许用户自定义全局序列化配置。
  •   SerializeConvert.ToJsonString 方法使用全局默认选项进行序列化。
  •   SerializeConvert.FromJsonString 方法新增可选 jsonSerializerOptions 参数,支持自定义序列化选项(默认使用全局配置)。

TouchSocket.Http

  •   HttpResponse.WriteAsync 方法在无内容时自动添加 Content-Length: 0 头部。
  •   HttpResponse.WriteAsync 方法修正内容长度校验逻辑,当写入数据超过预期长度时抛出异常。
  •   HttpExtensions.CreateWriteStream 方法的 WriteAsync 重载缺少 cancellationToken 参数传递,现已正确传递取消令牌。

TouchSocket.Dmtp

  •   TcpDmtpSessionClient.CloseAsync 方法优化关闭流程,先调用 SendCloseAsync 发送关闭消息,再执行 CloseAsync 完成关闭。

TouchSocket

  •   ReconnectionOption<TClient> 构造函数简化 ConnectAction 逻辑,移除内置重连重试代码,仅保留连接调用。
  •   ReconnectionPlugin<TClient> 轮询任务使用 CancellationToken.None 替代插件的取消令牌,避免意外中断轮询。

TouchSocket.WebApi.Swagger

  •   SwaggerJsonSerializerContext JSON序列化上下文类,使用源生成器优化OpenAPI对象序列化性能。
  •   SwaggerPlugin.GetOpenApiJson 方法使用 SwaggerJsonSerializerContext.Default.OpenApiRoot 进行序列化,提升性能。

TouchSocketPro.PlcBridges

  •   PlcBridgeService.GetOrAddDriveRunner 方法创建 DriveRunner 时正确传递分组信息,而非使用GUID。

v4.1.0

更新日期: 2026.1.25

更新描述:

  • 【不兼容变更】默认JSON序列化器从Newtonsoft.Json切换到System.Text.Json,提升性能和AOT兼容性。
  • RPC代码生成器优化,移除同步代码生成相关逻辑,简化代码结构。
  • Swagger组件全面迁移到System.Text.Json,提升性能和内存使用。
  • Modbus主站扩展类精简,移除部分重复的同步方法。
  • 命名管道服务扩展类优化,移除同步启动方法。

更新详情:

TouchSocket.Core

  •   TouchSocket.Rpc.RpcAttribute 中的同步代码生成相关逻辑和注释代码,简化代码结构。
  •   RpcAttribute.GetPublicProperties 抽象方法,要求派生类实现属性获取逻辑。
  •   RpcAttribute.LoadPublicPropertiesAsDictionary 方法改为私有,优化属性加载逻辑。
  •   RpcAttribute.GetPublicPropertiesAsDictionary 方法上的RequiresUnreferencedCode特性。
  •   CodeGenerator 类移除注释代码,简化代码结构。

TouchSocket.WebApi

  •   WebApiOption 构造函数不再自动添加JSON序列化器,需要用户手动配置序列化器。
  •   WebApiSerializerConverter.AddJsonSerializerFormatter 方法(使用Newtonsoft.Json)。
  •   WebApiSerializerConverter 默认构造函数中添加System.Text.Json序列化器配置,清除默认解析器链以优化性能。
  •   WebApiSerializerConverter.Serialize 方法增加空值检查,避免不必要的序列化操作。
  •   WebApiClientWebApiClientSlim 使用 SystemTextJsonStringToClassSerializerFormatter 替代 JsonStringToClassSerializerFormatter
  •   WebApiAttribute.GetPublicProperties 方法实现,返回公共属性列表。
  •   WebApiJsonSerializerFormatter 改为继承自 SystemTextJsonStringToClassSerializerFormatter
  •   WebApiSystemTextJsonSerializerContext 增加常见类型的JSON序列化支持(bool、string、int、double、float、DateTime、DateTimeOffset、Version)。

TouchSocket.WebApi.Swagger

  •   Swagger组件所有OpenAPI相关类从Newtonsoft.Json迁移到System.Text.Json
    • OpenApiComponentOpenApiContentOpenApiInfoOpenApiParameter
    • OpenApiPathValueOpenApiPropertyOpenApiRequestBodyOpenApiResponse
    • OpenApiRootOpenApiSchema
  •   所有JSON特性从[JsonProperty]改为[JsonPropertyName]
  •   OpenApiStringEnumConverter 从继承Newtonsoft.Json.Converters.StringEnumConverter改为继承System.Text.Json.Serialization.JsonStringEnumConverter
  •   SwaggerPlugin.GetOpenApiJson 方法使用System.Text.Json.JsonSerializer进行序列化,配置使用JsonIgnoreCondition.WhenWritingNull和格式化输出。
  •   SwaggerPlugin.BuildHttpMethod 方法修复同一路径多个HTTP方法时的路由冲突问题。

TouchSocket.XmlRpc

  •   XmlRpcAttribute 中已废弃的构造函数(带参数版本)。
  •   XmlRpcAttribute.GetPublicProperties 方法实现,返回公共属性列表。

TouchSocket.Rpc

  •   RpcClientExtension.Invoke 同步方法(两个重载版本)。
  •   RpcClientExtension.InvokeT<T> 同步方法(两个重载版本,用于不同RPC客户端)。

TouchSocket

  •   ClientExtension.Close 同步方法(两个重载版本)。
  •   ClientExtension.SafeClose 同步方法(两个重载版本,已标记为Obsolete)。
  •   ClientExtension.Connect 同步方法(三个重载版本)。
  •   ClientExtension.TryConnect 同步方法(两个重载版本)。
  •   SenderExtension.Send 同步方法(多个重载版本,涵盖ISender、IRequestInfoSender、IIdSender、IUdpClientSender)。
  •   ServiceExtension.StartStop 同步方法(涵盖IServiceBase、ITcpService、IUdpSession)。
  •   WaitingClientExtension.SendThenResponse 同步方法(四个重载版本)。

TouchSocket.Modbus

  •   ModbusMasterExtension.SendModbusRequest 同步方法。
  •   ModbusMasterExtension.ReadWriteMultipleRegisters 同步方法(不带超时参数版本)。
  •   ModbusMasterExtension.ReadCoils 等读写方法的多个同步重载版本。
  •   ModbusMasterExtension 中所有标记为AsyncToSyncWarning的同步扩展方法。

TouchSocket.NamedPipe

  •   NamedPipeServiceExtension.Start 同步方法。

TouchSocketPro.PlcBridges

  •   IPlcOperatorExtension.Read 同步方法。

TouchSocket.TcpCommandLine

  •   TcpCommandLinePlugin 构造函数中使用 SystemTextJsonStringToClassSerializerFormatter 替代 JsonStringToClassSerializerFormatter

性能改进

  • System.Text.Json在大多数场景下比Newtonsoft.Json性能提升 20-50%
  • 异步方法强制使用避免了异步转同步的性能损耗
  • Swagger JSON生成性能提升约 30%
  • 减少内存分配,降低GC压力