【问题标题】:NServiceBus RavenDB Saga persister ignores JsonIgnoreAttributeNServiceBus RavenDB Saga 持久化器忽略 JsonIgnoreAttribute
【发布时间】:2012-08-16 03:06:13
【问题描述】:

我将对象存储在我的 saga 数据中,这些对象具有在序列化和反序列化期间应忽略的属性。我尝试使用 [NonSerialized] 和 [JsonIgnore] 标记这些属性(并使用 [DataContract] 注释类而不是使这些属性 [DataMember] ...),但似乎没有任何效果。无论我做什么,当 NServiceBus 调用 Json.NET 来保存传奇数据时,所有属性都会被序列化。我还尝试为有问题的对象实现自定义 JsonConverter,这也被忽略了(是的,我正在使用 [JsonConverter(typeof(MyConverter))] 注释对象类型...)

有没有办法让 saga 持久化以忽略 saga 数据中包含的对象中的属性?作为参考,我使用的是 NServiceBus 3.2.7、Json.NET 4.5.7 和 RavenDB build 960。总线配置为使用 RavenDB 持久性和 saga 持久性。

【问题讨论】:

  • 我知道你可能不想听到这个 - 但你为什么要这样做? :-)
  • 我有一个复杂的任务被细分为大量较小的任务。较小任务的结果需要组合成整体复杂任务的结果。为此,我将较小任务的结果存储在 saga 数据中。一些属性不应该被序列化的原因是它们包含我不想持久化的相对重量级的数据。我可以重构 saga,以便只有相关数据(变更集)保留在 saga 数据中,我可能稍后会这样做,但我不明白为什么我不能[JsonIgnore] 现在。
  • 是的。恐怕我不知道为什么 NonSerialized 被忽略的答案,但是如果您明白我的意思,那么您拥有不是 saga 数据的 saga 数据对我来说没有意义。

标签: c# json.net nservicebus ravendb nservicebus3


【解决方案1】:

NServiceBus 内部化了 raven 客户端和 json.net。这就是为什么这些属性不起作用的原因(它们本质上是不同的类型,因为我们与内部标志合并)。解决方法是使用未合并的仅核心版本的 nsb。也就是说,我很好奇你为什么需要这些额外的属性?

【讨论】:

  • 我将业务对象编写器存储在 saga 数据中,一旦 saga 完成,这些数据将被组合并发送回调用者。编写器通常包含基础对象数据 + 对其更改的字典。基础数据可能非常大并且不需要,因为调用者已经拥有它,所以它不需要实际存储在 saga 数据中。我想我要做的是重构一些东西,所以我只存储 saga 数据中更改的字典,而不是具有不可序列化字段的业务对象。谢谢。
  • 我会将您的答案标记为有效,因为您帮助我理解了属性不起作用的原因。再次感谢。
猜你喜欢
  • 1970-01-01
  • 2012-02-13
  • 1970-01-01
  • 1970-01-01
  • 2012-01-05
  • 2016-02-08
  • 2016-06-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多