У меня очень большая коллекция базы данных манго.MongDb Как найти элемент с недопустимыми данными
Теперь у ночной работы с большим количеством задач есть одна задача, чтобы пробежать по ней.
код работает с Еогеасп над ним, как это:
var sets = Collection.FindAll();
await sets.ForEachAsync(handler)
Теперь этим утром я получил:
System.FormatException: Произошла ошибка при десериализации Connections свойство класса SR.BusPortal.DomainModel.Search.StoredConnectionSet: произошла ошибка при десериализации свойства DeepLinkToken класса SR.BusPortal.DomainModel.Search.StoredConnectionStep: Inval Идентификатор BsonType: 34.
Свойства, на котором ошибка связана определяются следующим образом:
[IgnoreNull]
[DataMember(Order = 1390, Name = "lt")]
public string[] DeepLinkToken { get; set; }
Есть ли какие-либо специальные строки, которые могут быть проблематичными в этом массиве?
Теперь Как узнать, какой документ имеет недопустимое свойство? и какова была его ценность? Есть ли способ выбрать его? например с шеф-поваром манго или C# api?
Одна идея состоит в том, чтобы читать все как BsonDocuments, а затем вручную десериализовать их вручную BsonSerializer.Deserialize<MyType>(doc);
. Но есть ли лучший способ?
Обновление Я создал небольшой инструмент для тестирования, но я не получил никакого исключения. Неужели я ошибаюсь, думая, что следующий код должен сломаться/бросить конкретный доминант? Или более вероятно, что это была лишь временная ошибка?
source.FindAll(options).ForEachAsync((doc, pos) =>
{
try
{
var element = BsonSerializer.Deserialize<StoredConnectionSet>(doc);
}
catch(Exception err)
{
if(Debugger.IsAttached) // I run in debug with an attached VS debugger
{
Debugger.Break();
}
Console.WriteLine(err);
throw;
}
})