Десериализация: как получить имя переменной, выдающей ошибку

#.net #vb.net #debugging #deserialization #type-conversion

#.net #vb.net #отладка #десериализация #преобразование типа

Вопрос:

Я десериализирую большой объект.

 Dim Obj As Object = Nothing

Using FileStream As New System.IO.FileStream(File, System.IO.FileMode.Open)

    Dim BinaryFormatter As New Runtime.Serialization.Formatters.Binary.BinaryFormatter
    Try
        Obj = BinaryFormatter.Deserialize(FileStream)
    Catch ex As Exception
        Me.Notify(vbCrLf amp; ex.Message)
    End Try

End Using
  

Поскольку a изменил тип переменной с double на integer, теперь я получаю ошибку при десериализации («Объект типа ‘System.Double’ не может быть преобразован в тип ‘System.Int32’.»).

Проблема в том, что теперь, имея много переменных, я не помню, какую из них я изменил, и в сообщении об ошибке нет подсказки (пожалуйста, избавьте меня от оскорблений, я знаю, что был глупым 🙂 ).

Как мне заставить отладчик напоминать мне имя поля-нарушителя, чтобы я мог изменить его обратно на double или переименовать?

(c# или vb.net подсказки были бы оба полезны: не вопрос, зависящий от конкретного языка)

Комментарии:

1. есть ли InnerException в Exception ?

2. насколько я знаю, когда вы получаете эту ошибку, объект не может быть создан, поэтому эти переменные не существуют. Частичный объект не создается, но иногда вы можете установить разрывы или попробовать / перехватить в установщиках реквизитов, чтобы отследить виновника

3. Согласно Sayse, не могли бы вы проверить переменную ex, у нее может быть свойство inner exception, у которого тоже может быть свойство inner exception … или Me.Notify(vbCrLf amp; ex. toString()) предоставит полную информацию об ошибке.

4. это не может сказать вам, что FooVar является проблемой, потому что а) ваш Obj не был создан при сбое сериализации б) FooVar не является членом System. Объект c) попытка выполнить детализацию в переменной объекта, которая не является ничем, чтобы получить имя, скорее всего, приведет к новому исключению NullReference. Это просто поля или свойства, которые она сериализует?

5. Я не думаю, что вы можете; не с двоичным объектом. Если бы оно было сериализовано в XML, это было бы проще…