Вопрос по c# – Ошибка в XML-документе (2,2)

6

У меня есть некоторые XML-файлы, и я пытаюсь десериализовать, как показано ниже в данном коде.

using (StreamReader srFileContent = new StreamReader(filePath))  
{
    XmlSerializer serializer = new XmlSerializer(typeof(messageType));   
    messageType objMessage = (messageType)serializer.Deserialize(srFileContent);  
}

Здесь файл locate в filePath не содержит следующие строки

<?xml version="1.0"?>
<message xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">

и именно поэтому я получаю сообщение об ошибке. Можете ли вы помочь мне, как добавить эти строки во время выполнения, прежде чем десериализовать поток данного файла.

Ошибка приведена ниже:

System.InvalidOperationException: There is an error in XML document (2, 2). ---> System.InvalidOperationException: was not expected. at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReadermessageType.‌​Read161_message() --- End of inner exception stack trace --- at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events) at System.Xml.Serialization.XmlSerializer.Deserialize(TextReader textReader) at CCR2BB.frmMain.BWConvertProcess_DoWork()

Есть лиnot содержать эти строки? Кроме того, где находится остальная часть файла XML? Кроме того, в чем ошибка !? Ashe
Исключение говорит вам, что не так. Там написано: & lt; Document xmlns = & amp; & gt; не ожидал ". В вашем xml есть узел с именем & quot; Документ & quot; который не соответствует типу, в который вы пытаетесь десериализоваться. Можете ли вы показать нам определение messageType? Может ли это быть проблемой чувствительности к регистру? Или отсутствующее пространство имен? Chris Dunaway
Возможно, вы пытаетесь сериализовать и десериализовать различные типы? Ryan
Вы имеете в виду, что это не правильный файл XML? Какdoes это начало? Jon Skeet
Ошибка приведена ниже: System.InvalidOperationException: в XML-документе есть ошибка (2, 2). --- & GT; System.InvalidOperationException: & lt; Document xmlns = & amp;; & gt; не ожидал в Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReadermessageType.Read161_message () --- Конец внутренней трассировки стека исключений --- в System.Xml.Serialization.XmlSerializer.Deserialize (XmlReader xmlReader, String encodingStyle, события XmlDeserializationEvents) .Serialization.XmlSerializer.Deserialize (TextReader textReader) в CCR2BB.frmMain.BWConvertProcess_DoWork () Hiren Visavadiya

Ваш Ответ

3   ответа
0

Откуда вы взяли класс «messageType»?

Если вы создали xsd для вашего xml с помощью xsd.exe, а затем с помощью xsd вы создали этот класс.

Тогда ваш проект будет иметь два файла, которые содержат этот класс.

  • One of the file is designer.cs which contains this class which is derived from DataSet class
  • One file is simply a .cs file, which has a partial class.
  • When you use this class while deserializing, it will refer to the class from designer.cs which is derived from DataSet.
  • But if you remove designer.cs from you project, your code will refer to the partial class from .cs file.

Удалив этот файл designer.cs, класс которого был получен изDataSetЯ смог решить эту ошибку.

13

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

НАПРИМЕР:

try
{
  ...
}
catch (Exception ex)
{
  Console.WriteLine(ex.GetBaseException());
}
3

Решение в другом вопросе было:

XmlRootAttribute xRoot = new XmlRootAttribute();
xRoot.ElementName = "message";
// xRoot.Namespace = "http://www.cpandl.com";
xRoot.IsNullable = true;

XmlSerializer xs = new XmlSerializer(typeof(messageType),xRoot);

Может быть, это подход к вашей проблеме. Поскольку MSDN недоступен для моей сети, я не могу предоставить больше документации для XmlRootAttribute.

Error: User Rate Limit Exceeded

Похожие вопросы