Есть ли какие-либо инструменты там для помощи отладить / проверяют процесс XML-сериализации?
Например, предположите, что объект отмечен как внутренний вместо общественности. Нет никакого сообщения ошибки времени компиляции, ни сообщения об ошибке периода выполнения. Если Вы устанавливаете точку останова и ступаете в процесс сериализации, объект просто просто пропускается. Другими словами, часто трудно найти эти типы проблем. Отладчик позволил бы Вам ступать посредством процесса и обеспечивать некоторую обратную связь, например, встретился с этим атрибутом, выполненным с помощью итераций через свойства, и не нашел соответствующее общедоступное, пропущенное. Другая опция была бы инструментом проверки для исследования всех классов с атрибутами XML-сериализации, чтобы удостовериться, что они доступны и имеют методы установки и т.д.
Что значит "предмет". Если тип является внутренним, вы должны увидеть сообщение об ошибке. Исключение внешнее обычно не очень полезно, но проследите его через .InnerException
до самого низа и обычно точно объясняет, в чем проблема.
Если член полностью внутренний, то обязательно - он будет пропущен.
ИМО, модульные / интеграционные тесты здесь - ваш настоящий друг - желаемый результат сериализации в конечном итоге вне компилятора, поэтому не имеет значения, получите ли вы сообщение во время компиляции, если результат не не соответствует тому, что вы ожидаете. Я имею в виду следующее: выполните сериализацию и сравните с ожидаемым выходным файлом. То же самое.
Например, попытка сериализации:
[XmlRoot("Node", Namespace="http://flibble")]
public class MyType {
[XmlElement("chileNode")]
public string Value { get; internal set; }
}
дает (во время выполнения):
Невозможно создать временный класс (результат = 1). ошибка CS0200: свойство или индексатор 'MyType.Value' не может быть назначен - он доступен только для чтения
, что довольно специфично.
Я не знаю ни одного существующего инструмента, но вы можете сканировать классы с помощью отражения. Вы можете использовать отражение для просмотра кода, созданного сериализатором.
Здесь вы можете использовать инструмент SGen.exe из среды MS Visual Studio.
Запустив этот инструмент над вашей сборкой, содержащей серилизуемые типы, он сгенерирует для вас все версии XMLSerializer в библиотеке под названием "{original-library-name} .XmlSerializers.dll".
Вам придется запускать его как инструмент командной строки (может быть, как пост-этап сборки?), Поскольку параметр, доступный в параметрах проекта, «не соответствует тому, что вы ожидаете от него» в соответствии с документацией. Установка этого параметра на «Авто» или «Вкл.» Не всегда будет генерировать нужные вам сборки.
После запуска этого инструмента у вас теперь есть библиотека, содержащая все сериализаторы для вашего проекта. Теперь вы можете использовать эту библиотеку, чтобы проверить, доступны ли ожидаемые сериализаторы.
Надеюсь, это поможет,
Самый простой способ проверить этот тип проблем (где сериализация неполная или неправильная) - выполнить модульное тестирование - ничего сложного.
Помните, что обычно это поведение, которое вы пытаетесь доказать, а не реализация. Инструменты, которые проверяют определенные атрибуты, имеют ценность только для тестирования одной реализации вашего кода: модульный тест, подобный приведенному выше, может работать для любой формы сериализации или хранения без перезаписи теста.