2010-03-09 4 views
6

В C#/.NET 2.0, когда I serialize объект с использованием XmlSerializer, что является самым простым способом проверки вывода по схеме XML?Как я могу проверить результат работы XmlSerializer?

Проблема в том, что слишком легко написать недопустимый XML с XmlSerializer, и я не могу найти способ проверить XML, который не выглядит громоздким. В идеале я ожидал бы установить схему в XmlSerializer или иметь проверенный XmlWriter.

+0

В .NET 4 есть события, чтобы поймать неожиданные элементы. –

ответ

4

А что читать его снова, используя проверяющий читателя

Вот быстрый удар у него

Stream stream = new MemoryStream(Encoding.UTF8.GetBytes("<YourXml />")); 
var input = mappingAssembly.GetManifestResourceStream(
      "MySchema.xsd" 
      ); //This could be whatever resource your schema is   
var schemas = new XmlSchemaSet();    
schemas.Add(
    "urn:YourSchemaUrn", 
    XmlReader.Create(
     input 
    ) 
); 

var settings = new XmlReaderSettings 
          { 
           ValidationType = ValidationType.Schema, 
           Schemas = schemas 
          }; 

settings.ValidationEventHandler += MakeAHandlerToHandleAnyErrors; 

var reader = XmlReader.Create(stream, settings); 
while (reader.Read()) {} //Makes it read to the end, therefore validates 

Вам нужно иметь некоторый обработчик, чтобы сделать что-то, когда есть ошибки.

0

Вы можете использовать XmlReader для проверки XML-файла по схеме XSD.

+1

Верно, но это означает, что я должен написать XML, хранить его где-то и читать его снова. Я надеялся, что есть более простой способ сделать это на лету. –

+0

XmlSerializer не поддерживает проверку на соответствие схеме XSD, поскольку предполагается, что он должен генерировать XML из объекта, который всегда должен быть действительным. –

+0

Это не тот случай. Кажется, что требуемые элементы опущены, если их значение равно NULL. И, вероятно, есть другие вещи, которые не поддерживаются XmlSerializer (ограничения длины и шаблона для строк, уникальности, ссылки на ключевые слова). –

Смежные вопросы