CSLA/ReactiveUI 序列化问题

CSLA/ReactiveUI serialization issue

我正在尝试将 CSLA(最新版本)与 ReactiveUI/Reactive 扩展一起使用。

使用 reactiveUI (Bind/OneWayBind) 和 ToProperty 方法创建 WPF 绑定时,底层逻辑似乎使用 Rx Observable.FromEventPattern 挂接到 CSLA 的 BindableBase 中模型的 PropertyChanged 事件。

出现的问题是 CSLA 认为这些处理程序应该是可序列化的。

这是由BindableBase中的代码决定的,

if (value.Method.IsPublic && 
       (value.Method.DeclaringType.IsSerializable || 
        value.Method.IsStatic))
      _serializableChangedHandlers = (PropertyChangedEventHandler)
        System.Delegate.Combine(_serializableChangedHandlers, value);
    else
      _nonSerializableChangedHandlers = (PropertyChangedEventHandler)
        System.Delegate.Combine(_nonSerializableChangedHandlers, value);

在这种情况下,该方法是在反应式扩展中创建的匿名委托,其中 value.Method 是 public 并且 value.Method.DeclaringType 是 System.Action`2[ [System.Object], System.ComponentModel.PropertyChangedEventArgs]] 其中有 IsSerializable == true

这会导致将处理程序添加到可序列化列表中。

关于我可以做些什么来不将这些处理程序添加到可序列化处理程序的任何建议?

这似乎是 ReactiveUI 中的错误。如果它们的类型实际上不是可序列化的,并且并非设计为跨 AppDomain、进程或网络边界流动,则不应将其标记为可序列化。