How can I validate the output of XmlSerializer?

穿精又带淫゛_ 提交于 2019-12-10 04:34:00

问题


In C# / .NET 2.0, when I serialize an object using XmlSerializer, what's the easiest way to validate the output against an XML schema?

The problem is that it is all too easy to write invalid XML with the XmlSerializer, and I can't find a way to validate the XML that does not look cumbersome. Ideally I would expect to set the schema in the XmlSerializer or to have a XmlWriter that validates.


回答1:


What about reading it in again using a validating reader

Here's a quick stab at it

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

You'll need to have some handler to do something when there are errors.




回答2:


You could use XmlReader to validate a XML file against an XSD schema.



来源:https://stackoverflow.com/questions/2407944/how-can-i-validate-the-output-of-xmlserializer

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!