cqrs - 使用 NEventStore 的内置 JSON Serializer 序列化复杂类型

标签 cqrs event-sourcing neventstore

我在使用 CQRS/Event-Sourcing 的应用程序中使用 NEventStore。我的 WireUp 如下所示:

 return NEventStore.Wireup.Init()
               .LogToOutputWindow()
               .UsingInMemoryPersistence()      
               .UsingSqlPersistence("TestConnection") 
               .WithDialect(new MsSqlDialect())
               .EnlistInAmbientTransaction()        
               .InitializeStorageEngine()               
               .UsingJsonSerialization()                             
               .Build();

序列化包含内置简单数据类型(例如字符串和整数)的事件效果很好。但是,当我尝试序列化使用我定义的结构的事件时,反序列化值为空。

我可能必须使用属性来标记我的事件的成员。但是NEventStore使用的是什么方案呢? C# 有很多选项(来自 DataContract Serializer 的属性,来自 XmlSerializer 的属性,...)。

我也想知道序列化有什么限制。 NEventStore 是否需要一个公共(public)的空构造函数?公共(public)二传手?或者我可以使用只读字段(我的偏好)。

我一直无法弄清楚 NEventStore 使用的是什么 Json 序列化程序。它似乎不是 NetwonSoft 的那个,因为它有一个单独的 nuget 包。

最佳答案

我遇到了同样的问题,所以这是我发现的。 NEventStore 在内部使用 Newtonsoft 的 Json.net。这是 Newtonsoft 关于序列化如何工作的页面的链接:http://www.newtonsoft.com/json/help/html/serializationguide.htm#ISerializable

您有多种选择来序列化类型。我选择实现 System.Runtime.Serialization.ISerializable 接口(interface),因为我不想从我的模型程序集中引用 json.net 依赖项。您的情况可能有所不同。

关于cqrs - 使用 NEventStore 的内置 JSON Serializer 序列化复杂类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31523290/

相关文章:

asp.net-mvc - 如何防止 ASP.net WP 因错误而终止

c# - 获取 NEventStore head 修订版

user-interface - N服务总线/CQRS : How to handle things in the userinterface?

asynchronous - 两个冲突的长生命周期流程管理器

spring - NoHandlerForCommandException 与 axon-spring-boot-starter

database - 事件溯源 - 显示旧数据

sql-server - 事件溯源 SQL Server 删除

java - 在 Java 中使用 OOP 实现 CQRS

domain-driven-design - 当键未发生时查找读取模型投影行?

NEventStore Commit Guid,它到底是干什么用的?