2015-07-20 3 views
3

Я использую NEventStore в приложении, использующем CQRS/Event-Sourcing. Мой WireUp выглядит следующим образом:Сериализация сложных типов с использованием встроенного JSON-сериализатора NEventStore

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

Сериализация события, которые содержат встроенные простые типы данных, такие как строки и междунар работает отлично. Однако, когда я пытаюсь сериализовать событие, которое использует структуру, которую я определил, десериализованное значение равно null.

Возможно, мне придется отмечать элементы моего события с использованием атрибутов. Но какая схема использует NEventStore? У C# есть несколько вариантов (атрибуты из DataContract Serializer, атрибуты из XmlSerializer, ...).

Мне также интересно, какие ограничения существуют при сериализации. Требуется ли NEventStore публичный пустой конструктор? Публичные сеттеры? Или я могу использовать поля readonly (мои предпочтения).

Мне не удалось выяснить, что использует сериализатор Json NEventStore. Кажется, это не тот, что NetwonSoft, поскольку для него есть отдельный пакет nuget.

+1

Он использует [Json.Net] (https://github.com/NEventStore/NEventStore/blob/master/src/NEventStore/Serialization/JsonSerializer.cs) – MikeSW

ответ

0

У меня была такая же проблема, поэтому вот что я нашел. NEventStore использует Json.net от Newtonsoft. Вот ссылка на страницу Newtonsoft о том, как работает сериализация: http://www.newtonsoft.com/json/help/html/serializationguide.htm#ISerializable

У вас есть несколько вариантов получения сериализации типа. Я решил реализовать интерфейс System.Runtime.Serialization.ISerializable, потому что я не хотел ссылаться на зависимость json.net от сборки моделей. Ваш случай может быть другим.

Смежные вопросы