2010-03-09 10 views
6

In C#/.NET 2.0, quando I serialize un oggetto utilizza XmlSerializer, qual è il modo più semplice per convalidare l'output su uno schema XML?Come posso convalidare l'output di XmlSerializer?

Il problema è che è troppo facile scrivere XML non valido con XmlSerializer e non riesco a trovare un modo per convalidare l'XML che non sembra macchinoso. Idealmente, mi aspetto di impostare lo schema in XmlSerializer o di avere un XmlWriter che convalida.

+0

In .NET 4 ci sono eventi per catturare elementi inaspettati. –

risposta

4

Che dire di leggerlo di nuovo utilizzando un lettore di convalidare

Ecco una rapida pugnalata a lui

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 

avrete bisogno di avere qualche gestore per fare qualcosa quando ci sono errori.

0

È possibile utilizzare XmlReader per convalidare un file XML rispetto a uno schema XSD.

+1

Vero, ma ciò significa che devo scrivere l'XML, memorizzarlo da qualche parte e leggerlo di nuovo. Speravo che esistesse un modo più semplice per farlo al volo. –

+0

XmlSerializer non supporta la convalida su uno schema XSD poiché si suppone che generi l'XML da un oggetto che dovrebbe sempre essere valido. –

+0

Tuttavia, questo non è il caso. Sembra che gli elementi richiesti siano omessi se il loro valore è nullo. E probabilmente ci sono altre cose non supportate da XmlSerializer (vincoli di lunghezza e modello per stringhe, unicità, riferimenti chiave). –

Problemi correlati