NewLife/X

支持自定义 JSON 序列化选项

新增 JsonOptions 属性,允许通过 JsonHost.Write 和 JsonHost.Read 方法使用自定义的 JSON 配置,提升复杂对象的编码和解码灵活性,同时保持默认行为的兼容性。
智能大石头 authored at 2026-05-26 00:06:56
2e72d81
Tree
1 Parent(s) a0f9c04
Summary: 1 changed files with 5 additions and 2 deletions.
Modified +5 -2
Modified +5 -2
diff --git a/NewLife.Core/Messaging/EventHub.cs b/NewLife.Core/Messaging/EventHub.cs
index 048c4e6..42dfb0b 100644
--- a/NewLife.Core/Messaging/EventHub.cs
+++ b/NewLife.Core/Messaging/EventHub.cs
@@ -68,6 +68,9 @@ public class EventHub<TEvent> : IEventHandler<IPacket>, IEventHandler<String>, I
     /// <summary>JSON 主机。用于编解码事件体</summary>
     public IJsonHost JsonHost { get; set; } = JsonHelper.Default;
 
+    /// <summary>JSON序列化选项,影响复杂对象的编码和解码行为</summary>
+    public JsonOptions? JsonOptions { get; set; }
+
     /// <summary>动作判定阈值。消息体短于该长度且不以 <c>{</c> 开头时视为控制动作指令</summary>
     public Int32 ActionMaxLength { get; set; } = 32;
 
@@ -197,7 +200,7 @@ public class EventHub<TEvent> : IEventHandler<IPacket>, IEventHandler<String>, I
     /// <returns>编码后的字符串</returns>
     protected virtual String EncodeEvent(String topic, String clientId, TEvent @event)
     {
-        var body = @event is String s ? s : JsonHost.Write(@event!);
+        var body = @event is String s ? s : JsonHost.Write(@event!, JsonOptions);
         return $"event#{topic}#{clientId}#{body}";
     }
 
@@ -226,7 +229,7 @@ public class EventHub<TEvent> : IEventHandler<IPacket>, IEventHandler<String>, I
         }
 
         // JSON 反序列化
-        var evt = JsonHost.Read<TEvent>(msg, null);
+        var evt = JsonHost.Read<TEvent>(msg, JsonOptions);
         if (evt == null)
         {
             envelope = default;