2010-03-09 15 views
6

En C#/.NET 2.0, cuando serialize un objeto utilizando XmlSerializer, ¿cuál es la forma más fácil para validar la salida con un esquema XML?¿Cómo puedo validar la salida de XmlSerializer?

El problema es que es demasiado fácil escribir XML no válido con el XmlSerializer, y no puedo encontrar una forma de validar el XML que no parece engorroso. Idealmente, esperaría establecer el esquema en XmlSerializer o tener un XmlWriter que valide.

+0

En .NET 4 Hay eventos para la captura de elementos inesperados. –

Respuesta

4

¿Qué hay de leerlo de nuevo usando un lector de validación

He aquí una punzada en el que

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 

que necesitará tener algún manejador de hacer algo cuando hay errores.

0

Usted podría utilizar XmlReader para validar un archivo XML con un esquema XSD.

+1

Cierto, pero eso significa que tengo que escribir el XML, almacenarlo en algún lugar y volver a leerlo. Esperaba que hubiera una manera más fácil de hacerlo sobre la marcha. –

+0

XmlSerializer no soporta la validación contra un esquema XSD ya que se supone generar el XML desde un objeto que debe ser siempre válida. –

+0

Sin embargo, ese no es el caso. Parece que los elementos requeridos se omiten si su valor es nulo. Y es probable que haya otras cosas que no son compatibles con XmlSerializer (restricciones de longitud y patrón para cadenas, unicidad, referencias clave). –

Cuestiones relacionadas