Исходный код вики Ошибка сериализации в обфусцированной сборке
Редактировал(а) Alexandr Fokin 2020/08/03 12:27
Последние авторы
| author | version | line-number | content |
|---|---|---|---|
| 1 | После обфусцирования с помощью .NET Reactor 5.9.8 возникло исключение при попытке автоматической десериализации xml файла. Изначально файл был сериализован с помощью необфусцированной версии, что, возможно, послужило причиной возникновения ошибки (а может и нет). Но в рамках обратной совместимости, необходимо подерживать ранее созданные файлы. | ||
| 2 | |||
| 3 | Отлов исключения показал следующее: | ||
| 4 | {{code language="C#"}} | ||
| 5 | Возникла ошибка при отражении типа "..." в System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping(...) | ||
| 6 | {{/code}} | ||
| 7 | Внутреннее исключение: | ||
| 8 | {{code language="C#"}} | ||
| 9 | Не удается сериализовать член "Devices" типа "System.Collections.Generic.List...". Дополнительные сведения см. во внутреннем исключении. | ||
| 10 | {{/code}} | ||
| 11 | Следующее внутреннее исключение содержит необходимые сведения: | ||
| 12 | {{code language="C#"}} | ||
| 13 | IveprCalculator.Models.Device недоступен в силу его уровня защиты. Возможна обработка только общих типов. | ||
| 14 | {{/code}} | ||
| 15 | |||
| 16 | Это значит, что обфускатор отметил все возможные публичные классы как internal (если включить данную настройку). | ||
| 17 | |||
| 18 | **Решение**: найти параметр исключений в настройках обфускации и указать, что классы-сериализаторы (например, у меня были задействованы три класса) не должны быть обфусцированы и не должны быть отмечены internal. |