【问题标题】:CSLA/ReactiveUI serialization issueCSLA/ReactiveUI 序列化问题
【发布时间】:2015-05-17 12:27:27
【问题描述】:

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

当使用 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

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

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

【问题讨论】:

    标签: wpf system.reactive reactiveui csla


    【解决方案1】:

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

    【讨论】:

    • 我同意这是 ReactiveUI/ReactiveExtensions 的缺陷。我很可能需要做更多的工作才能发现应该在哪里声明非序列化。
    猜你喜欢
    • 1970-01-01
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    相关资源
    最近更新 更多