Я использую последние версии NodaTime и Mongo DB Official Driver. У меня есть простой класс POCO, который использует NodaTime ZonedDateTime
в качестве замены для .NET DateTime в нескольких свойствах.NodaTime с MongoDB: Класс ценности NodaTime.ZonedDateTime нельзя десеризировать
public class MyPOCO
{
[BsonId]
[Key]
public ObjectId SomeId { get; set; }
public string SomeProperty { get; set; }
public ZonedDateTime SomeDateTime { get; set; }
}
Я могу поставить модель в коллекции легко, но когда я пытаюсь читать запрошенные модели, я получаю следующее MongoDB.Bson.BsonSerializationException
: класс
Значение NodaTime.ZonedDateTime не может быть десериализован
Какая хорошая или лучшая практика для решения этой проблемы?
UPDATE
После размещения моего solution проблемы, я столкнулся возможный новый вопрос ... Когда я запрашиваю коллекцию и использовать DateTime в моем запросе, как where SomeDateTime < now' (where
теперь is a variable I create from system time) it seems that each document must be deserialized using my
ZonedDateTimeSerializer` перед тем предложение where может быть оценено. Это похоже на большую проблему с производительностью, не так ли? Мне действительно нужно думать о возвращении к BCL DateTime снова, даже если это больно.
UPDATE 2
Я принял мое решение, используя ZonedDateTimeSerializer
, но я не чувствую себя комфортно с NodaTime в сочетании с MongoDB, в то время как большие индивидуальные решения. Но на данный момент они просто не работают хорошо, без тяжелых манипуляций.
базы данных сериализации всегда будет конкретная реализация. Вы можете проверить те, что я сделал для [Noda Time с RavenDB] (https://github.com/mj1856/RavenDB-NodaTime). Я также работаю над (еще не готова) поддержкой SQL Server. Мы были бы в восторге от поддержки MongoDB, если вы хотели его развивать. –
Кроме того, 'NodaTime.Serialization.JsonNet' почти завершен. Проверьте дерево источников Noda Time. Вы можете начать там, но если MongoDB ожидает BSON, вам все равно придется переводить. –