2.39.0

(feat): 为 WebSocket API 类生成接口(例如 IStreamApiITranscribeApi) 以提高可测试性。每个 WebSocket 客户端现在都实现相应的接口, 该接口声明所有公共事件属性、StatusConnectAsyncSendCloseAsync。当启用 WebSockets 时,根客户端接口(ICortiClient)还包含工厂方法 签名(CreateStreamApiCreateTranscribeApi)。

2.38.1

(fix): 修复 Event<T> 线程安全问题。RaiseEvent 现在在锁下对订阅者 集合进行快照后再迭代,SubscribeUnsubscribeUnsubscribeAll 已同步,以防止在不同线程并发添加或移除 处理程序时出现 InvalidOperationException

2.38.0

(feat): 为所有公共异步 WebSocket 方法添加可选的 CancellationToken 参数 (ConnectAsyncCloseAsyncSend 重载)。该 token 贯穿 内部的 WebSocketClientWebSocketConnection,并向下传递到底层的 ClientWebSocket.SendAsync/ConnectAsync/CloseAsync 调用,使调用者能够 取消长时间运行的 WebSocket 操作。

2.37.2

(fix): 修复 WebSocket 二进制消息使用 WebSocketMessageType.Text 而非 WebSocketMessageType.Binary 发送的问题。RequestBinaryMessageRequestBinarySegmentMessage 现在在调用 SendAsync 时正确使用 WebSocketMessageType.Binary,确保 音频数据(例如 webm/opus 块)作为二进制帧发送。

2.37.1

(fix): 为所有剩余的自定义 JsonConverter 类型添加 ReadAsPropertyNameWriteAsPropertyName 重写: EnumSerializer<TEnum>(原生 C# 枚举)、 DateTimeSerializerDateAsDateTimeConverter、判别联合转换器 和字面量类型转换器。没有这些重写,当这些类型中的任何一个用作 Dictionary<TKey, TValue> 键时,System.Text.Json 会抛出 NotSupportedException。这补充了 2.35.1 中的 IStringEnum 修复。

2.37.0

(feat): 使用 JsonAssert.Roundtrips<T>(inputJson) 的单个往返 序列化测试替换单独的反序列化和序列化测试。该助手将 JSON 反序列化为 T,重新序列化,并通过 JsonElement 深度 相等性与原始 JSON 进行比较,产生可报告差异的失败。

2.36.0

(feat): 添加 UsingObjectDictionaryComparer 到测试比较器中,用于处理 Dictionary<string, object?> 字段。System.Text.Json 将 object? 值反序列化为 JsonElement,因此结构相等性比较 需要在比较前序列化双方。UsingDefaults() 链现在自动包含此比较器。

2.35.1

(fix): 为生成的 IStringEnum JsonConverter 添加 ReadAsPropertyNameWriteAsPropertyName 重写。 没有这些重写,System.Text.Json 在序列化或反序列化 Dictionary<TStringEnum, TValue> 时会在运行时抛出 NotSupportedException。 这适用于所有生成的 IStringEnum 类型,因此字典键用法无需重新生成即可工作。

2.35.0

(fix): 修复 WebSocket 二进制消息发送。二进制消息(例如音频字节)现在 作为原始字节发送,而不是进行 JSON 序列化,这导致服务器以 CONFIG_DENIED 拒绝 它们。

(fix): 修复 WebSocket 传入消息反序列化。TryDeserialize 现在传递 JsonSerializerOptions,以便生成的字面量属性设置器在反序列化期间正确 验证常量判别器字段(例如 type: "transcript" vs type: "flushed")。

(feat): 为 WebSocket 客户端添加向前兼容的 UnknownMessage 事件。当服务器 发送 SDK 无法识别的事件类型时,现在将其分派到 UnknownMessage 事件处理程序(作为 JsonElement),而不是引发异常。 这允许 SDK 优雅地处理新的服务器事件类型,而无需重新生成。