2015-07-20 25 views
3

我在使用CQRS /事件源的應用程序中使用NEventStore。我WireUp如下所示:使用NEventStore的內置JSON序列化器對複雜類型進行序列化

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

序列化包含內置的簡單數據類型的事件,比如字符串和INT工作正常。但是,當我嘗試序列化使用我定義的反序列化值爲空的結構的事件時。

我可能必須使用屬性標記我的事件的成員。但是NEventStore使用什麼方案? C#有很多選項(來自DataContract Serializer的屬性,來自XmlSerializer的屬性......)。

我也想知道序列化有什麼限制。 NEventStore是否需要公共的空構造函數?公開二傳手?或者我可以使用只讀字段(我的首選項)。

我一直無法弄清Json序列化器NEventStore使用什麼。它似乎不是NetwonSoft的那個,因爲它有一個單獨的nuget包。

+1

它使用[Json.Net](https://github.com/NEventStore/NEventStore/blob/master/src/NEventStore/Serialization/JsonSerializer.cs) – MikeSW

回答

0

我有這個相同的問題,所以這就是我發現的。 NEventStore在內部使用Newtonsoft的Json.net。下面是Newtonsoft關於序列化如何工作的頁面的鏈接:http://www.newtonsoft.com/json/help/html/serializationguide.htm#ISerializable

您有幾個選項來獲取序列化類型。我選擇實現System.Runtime.Serialization.ISerializable接口,因爲我不想從模型組件中引用json.net依賴項。你的情況可能會有所不同。

相關問題