2016-10-21 2 views
2

Я храню DateTimeOffset в Mongo DB, используя стандартные поставщики сериализации.MongoDB C# DateTimeOffset serialization

В базе данных выглядит следующим образом:

{ 
    "_id" : LUUID("1197f7cf-cb83-4047-85f8-6e9f8c8ad24f"), 
    "CreatedDateTimeUtc" : [ 
     6.3612613922066e+017.0, 
     0 
    ] 
} 

Но когда я пытаюсь и десериализации в C# следующее исключение:

System.FormatException: Произошла ошибка при десериализации CreatedDateTimeUtc свойство класса Turnout.Common.Model.Turnout: ReadInt64 можно вызывать только тогда, когда CurrentBsonType - Int64, а не когда CurrentBsonType - Double.

Любые идеи о том, как заставить его играть красиво?

+0

Можете ли вы предоставить код, который вы используете для выполнения этой десериализации, пожалуйста? Можете ли вы также предоставить свою модель C#, если она строго типизирована, поскольку у вас могут не быть необходимых атрибутов для ваших свойств. – pieperu

ответ

0

Если вы все еще испытываете эту проблему, напишите свой собственный сериализатор. Посмотрите на DateTimeOffsetSerializer MongoDB.Bson.Serialization.Serializers для деталей реализации. Я фактически использую это вместо стандартного, так как он включает в себя читаемый DateTime. Регистрация это так:

new BsonStaticsWrapper().RegisterSerializer(typeof(DateTimeOffset), new DateTimeOffsetSerializer(BsonType.Document)); 

Я знаю, это не точный ответ на ваш вопрос, но это может помочь вам получить его. И это может помочь другим в поиске обходного пути.