xmlserializer validation

后端 未结 2 1233
难免孤独
难免孤独 2020-12-01 19:01

I\'m using XmlSerializer to deserialize Xml achives. But I found the class xsd.exe generated only offers capability to read the xml, but no validation. For example, if one n

2条回答
  •  旧时难觅i
    2020-12-01 19:44

    The following code should validate against a schema while deserializing. Similar code can be used to validate against a schema while serializing.

    private static Response DeserializeAndValidate(string tempFileName)
    {
        XmlSchemaSet schemas = new XmlSchemaSet();
        schemas.Add(LoadSchema());
    
        Exception firstException = null;
    
        var settings = new XmlReaderSettings
                       {
                           Schemas = schemas,
                           ValidationType = ValidationType.Schema,
                           ValidationFlags =
                               XmlSchemaValidationFlags.ProcessIdentityConstraints |
                               XmlSchemaValidationFlags.ReportValidationWarnings
                       };
        settings.ValidationEventHandler +=
            delegate(object sender, ValidationEventArgs args)
            {
                if (args.Severity == XmlSeverityType.Warning)
                {
                    Console.WriteLine(args.Message);
                }
                else
                {
                    if (firstException == null)
                    {
                        firstException = args.Exception;
                    }
    
                    Console.WriteLine(args.Exception.ToString());
                }
            };
    
        Response result;
        using (var input = new StreamReader(tempFileName))
        {
            using (XmlReader reader = XmlReader.Create(input, settings))
            {
                XmlSerializer ser = new XmlSerializer(typeof (Response));
                result = (Response) ser.Deserialize(reader);
            }
        }
    
        if (firstException != null)
        {
            throw firstException;
        }
    
        return result;
    }
    

提交回复
热议问题