Сериализация сложных типов с использованием встроенного JSON-сериализатора NEventStore.

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

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

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

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

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

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


person Roy T.    schedule 20.07.2015    source источник
comment
Он использует Json.Net.   -  person MikeSW    schedule 20.07.2015


Ответы (1)


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

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

person EverPresent    schedule 10.10.2015