MongoDb .NET Driver System.FormatException/DecoderFallbackExceptionКак остановить Mongodb .NET драйвер, бросающий System.FormatException?
Произошла ошибка при десериализации описание свойства класса KerbToolsService.Models.promotion: Невозможно перевести байты [ED] [A0] с индексом 136 из указанную кодовую страницу в Юникод.
Приложение .NET API для веб-приложений, которое я написал для мониторинга состояния нашей системы на основе MongoDB/Node.js, начал бросать исключение DecoderFallbackException.
Вот трассировки стека
System.FormatException occurred
HResult=-2146233033
Message=An error occurred while deserializing the description property of class KerbToolsService.Models.promotion: Unable to translate bytes [ED][A0] at index 136 from specified code page to Unicode.
Source=MongoDB.Bson
StackTrace:
at MongoDB.Bson.Serialization.BsonClassMapSerializer`1.DeserializeMemberValue(BsonDeserializationContext context, BsonMemberMap memberMap)
InnerException: System.Text.DecoderFallbackException
HResult=-2147024809
Message=Unable to translate bytes [ED][A0] at index 136 from specified code page to Unicode.
Source=mscorlib
Index=136
StackTrace:
at System.Text.DecoderExceptionFallbackBuffer.Throw(Byte[] bytesUnknown, Int32 index)
at System.Text.DecoderExceptionFallbackBuffer.Fallback(Byte[] bytesUnknown, Int32 index)
at System.Text.DecoderFallbackBuffer.InternalFallback(Byte[] bytes, Byte* pBytes)
at System.Text.UTF8Encoding.GetCharCount(Byte* bytes, Int32 count, DecoderNLS baseDecoder)
at System.String.CreateStringFromEncoding(Byte* bytes, Int32 byteLength, Encoding encoding)
at System.Text.UTF8Encoding.GetString(Byte[] bytes, Int32 index, Int32 count)
at MongoDB.Bson.IO.Utf8Helper.DecodeUtf8String(Byte[] bytes, Int32 index, Int32 count, UTF8Encoding encoding)
at MongoDB.Bson.IO.ByteBufferStream.ReadString(UTF8Encoding encoding)
at MongoDB.Bson.IO.BsonBinaryReader.ReadString()
at MongoDB.Bson.Serialization.Serializers.StringSerializer.DeserializeValue(BsonDeserializationContext context, BsonDeserializationArgs args)
at MongoDB.Bson.Serialization.Serializers.SealedClassSerializerBase`1.Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)
at MongoDB.Bson.Serialization.Serializers.SerializerBase`1.MongoDB.Bson.Serialization.IBsonSerializer.Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)
at MongoDB.Bson.Serialization.IBsonSerializerExtensions.Deserialize(IBsonSerializer serializer, BsonDeserializationContext context)
at MongoDB.Bson.Serialization.BsonClassMapSerializer`1.DeserializeMemberValue(BsonDeserializationContext context, BsonMemberMap memberMap)
До сих пор я знаю, что персонаж U+D83D
, что закодированы ED A0 BD
в BSON в документе в базе данных, и вызывает .NET UTF8Encoding бросить DecoderFallbackException. Другой код (пользовательский интерфейс MongoLab и наше приложение на основе Node.js) заменяет его ?
, но он убивает запрос в драйвере .NET.
Я хочу, чтобы драйвер .NET Mongo вел себя так же, как и другие, и не взорвался, если видит недопустимый UTF-8.
вам, возможно, потребуется построить настройки и передать их в CTOR. Я думаю, что client.Settings только на данный момент. –
Спасибо за информацию. Мне было интересно, почему объект кодирования был передан в стек mongo. Да, изменение настроек бросает: исключение первого шанса типа «System.InvalidOperationException» MongoClientSettings заморожено. Сначала попробую создать настройки. –
Решенный: я отредактирую ответ с подробностями. Спасибо Stefano & @craig –