2016-06-27 3 views
0

Я не понимаю, почему я не могу проверить XML-файл в схеме и затем десериализовать xml в класс.Stumped on my Я не могу проверить и десериализовать XML

Я могу сделать либо или. т. е. если я прокомментирую ValidateXML, то работает ConvertToObject и наоборот. Если оставить в обоих случаях ошибку: «В документе XML есть ошибка (0, 0)» (Обычно, когда я получаю эту ошибку, я обычно оставлял документ открытым до десериализации.

Моя основная логика

foreach (var myFile in Directory.EnumerateFiles(@"C:MyFolder", "*.xml")) 
      { 
       try 
       { 
        using (var fileStream = new FileStream(myFile, FileMode.Open, FileAccess.Read)) 
        { 
         if (ValidateXML(fileStream)) 
         { 
          CreateObjects(fileStream); 
          goodCounter++; 
         } 
         else 
         { 
          sb.AppendLine("Validation failed for: " + myFile); 
          badCounter++; 
         } 
        } 
       } 
       catch 
       { 
        sb.AppendLine(myFile); 
       } 
      } 

Мой метод проверки:

private bool ValidateXML(Stream stream) 
{ 
    try 
    { 
     XmlDocument xDoc = new XmlDocument(); 
     xDoc.Load(stream); 
     xDoc.Schemas.Add(null, @"C:My_XSD.xsd"); 

     ValidationEventHandler eventHandler = new ValidationEventHandler(ValidationEventHandler); 
     xDoc.Validate(eventHandler); 

     return true; 
    } 
    catch 
    { 
     return false; 
    } 
} 
    static void ValidationEventHandler(object sender, ValidationEventArgs e) 
    { 
     switch (e.Severity) 
     { 
      case XmlSeverityType.Error: 
       //Console.WriteLine("Error: {0}", e.Message); 
       throw new Exception(e.Message); 
       //break; 
      case XmlSeverityType.Warning: 
       //Console.WriteLine("Warning {0}", e.Message); 
       throw new Exception(e.Message); 
       //break; 
     } 

    } 
+2

Вам может понадобиться установить положение й e filestream вернуться к происхождению, прежде чем пытаться создать свой объект из него. – Kevin

+0

Вы можете десериализовать прямо из вашего 'XmlDocument' с помощью' XmlNodeReader'. См. [Свойство объекта Deserialize с помощью StringReader vs XmlNodeReader] (https://stackoverflow.com/questions/30102275/deserialize-object-property-with-stringreader-vs-xmlnodereader) или [Как инициализировать 'XmlElement []'?] (https://stackoverflow.com/questions/32805732/how-to-initialize-xmlelement). – dbc

ответ

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