Инструменты для отладки / проверяющий [закрытую] Сериализацию XML

Есть ли какие-либо инструменты там для помощи отладить / проверяют процесс XML-сериализации?

Например, предположите, что объект отмечен как внутренний вместо общественности. Нет никакого сообщения ошибки времени компиляции, ни сообщения об ошибке периода выполнения. Если Вы устанавливаете точку останова и ступаете в процесс сериализации, объект просто просто пропускается. Другими словами, часто трудно найти эти типы проблем. Отладчик позволил бы Вам ступать посредством процесса и обеспечивать некоторую обратную связь, например, встретился с этим атрибутом, выполненным с помощью итераций через свойства, и не нашел соответствующее общедоступное, пропущенное. Другая опция была бы инструментом проверки для исследования всех классов с атрибутами XML-сериализации, чтобы удостовериться, что они доступны и имеют методы установки и т.д.

12
задан Tim 25 February 2010 в 23:50
поделиться

4 ответа

Что значит "предмет". Если тип является внутренним, вы должны увидеть сообщение об ошибке. Исключение внешнее обычно не очень полезно, но проследите его через .InnerException до самого низа и обычно точно объясняет, в чем проблема.

Если член полностью внутренний, то обязательно - он будет пропущен.

ИМО, модульные / интеграционные тесты здесь - ваш настоящий друг - желаемый результат сериализации в конечном итоге вне компилятора, поэтому не имеет значения, получите ли вы сообщение во время компиляции, если результат не не соответствует тому, что вы ожидаете. Я имею в виду следующее: выполните сериализацию и сравните с ожидаемым выходным файлом. То же самое.

Например, попытка сериализации:

[XmlRoot("Node", Namespace="http://flibble")]
public class MyType {
    [XmlElement("chileNode")]
    public string Value { get; internal set; }
}

дает (во время выполнения):

Невозможно создать временный класс (результат = 1). ошибка CS0200: свойство или индексатор 'MyType.Value' не может быть назначен - он доступен только для чтения

, что довольно специфично.

1
ответ дан 2 December 2019 в 19:31
поделиться

Я не знаю ни одного существующего инструмента, но вы можете сканировать классы с помощью отражения. Вы можете использовать отражение для просмотра кода, созданного сериализатором.

0
ответ дан 2 December 2019 в 19:31
поделиться

Здесь вы можете использовать инструмент SGen.exe из среды MS Visual Studio.

Запустив этот инструмент над вашей сборкой, содержащей серилизуемые типы, он сгенерирует для вас все версии XMLSerializer в библиотеке под названием "{original-library-name} .XmlSerializers.dll".

Вам придется запускать его как инструмент командной строки (может быть, как пост-этап сборки?), Поскольку параметр, доступный в параметрах проекта, «не соответствует тому, что вы ожидаете от него» в соответствии с документацией. Установка этого параметра на «Авто» или «Вкл.» Не всегда будет генерировать нужные вам сборки.

После запуска этого инструмента у вас теперь есть библиотека, содержащая все сериализаторы для вашего проекта. Теперь вы можете использовать эту библиотеку, чтобы проверить, доступны ли ожидаемые сериализаторы.

Надеюсь, это поможет,

0
ответ дан 2 December 2019 в 19:31
поделиться

Самый простой способ проверить этот тип проблем (где сериализация неполная или неправильная) - выполнить модульное тестирование - ничего сложного.

  • Создайте объект вашего сериализуемого типа
  • Установите все свойства
  • Сериализуйте его
  • Возьмите сериализованный вывод и десериализуйте его в новый объект
  • Проверьте все свойства объекта, чтобы сделать убедитесь, что они все еще заполнены
  • Не пройдите модульный тест, если какое-либо из свойств не имеет ожидаемого значения

Помните, что обычно это поведение, которое вы пытаетесь доказать, а не реализация. Инструменты, которые проверяют определенные атрибуты, имеют ценность только для тестирования одной реализации вашего кода: модульный тест, подобный приведенному выше, может работать для любой формы сериализации или хранения без перезаписи теста.

3
ответ дан 2 December 2019 в 19:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: