2009-03-23 5 views
7

Im пытается десериализации файл XML с XmlSerializer, однако им получать это исключение:Исключение при попытке десериализации XML-файл

«Там есть ошибка в документе XML (1, 2)» InnerException есть: "<Mymessage xmlns='http://MyMessages/'> не было ожидается."

Это первая строка в файле XML. я предполагаю, что это имеет какое-то отношение к xmlns.

Я попытался спросить Google, а затем попытался добавить следующую строку в мой код

[XmlRoot("MyMessage", Namespace="'http://MyMessages/")] 

Но я все еще получаю такое же исключение.

+0

могли бы вы поделиться соответствующую часть файла XML, пожалуйста? –

+0

Это старый вопрос, но важно знать, что такая же ошибка может быть вызвана из-за отсутствия класса атрибута Serializable. –

ответ

8

В конструкторе XmlSerializer я необходимо указать пространство имен по умолчанию, после того, как делать это все работало просто отлично

+5

Можете ли вы привести пример кода, как вы это решили? Я думаю, что у меня такая же проблема, но определение пространства имен по умолчанию не имеет значения. – Jon

3

Просьба предоставить полный код файла XML, чтобы лучше понять проблему.

поставил Также это в качестве первой строки в файле XML и посмотреть, если это решает проблему

<?xml version="1.0" encoding="utf-8"?> 
+0

Я бы настоятельно рекомендовал использовать «utf-8» вместо iso-8859-1 для всей работы с совместимыми веб-сервисами! –

1

Похоже, у вас есть BORKED файл XML. Простые способы, чтобы узнать:

  • попробуйте загрузить его в средстве просмотра XML
  • или просто убедитесь, что он имеет расширение .xml и нагрузки в VS или IE
  • или запустить xsd.exe над ним

Если они жалуются, то xml, безусловно, поврежден. Если они работают нормально и отображают ваши данные, значит, у вас, вероятно, неправильные атрибуты сериализации. Попробуйте использовать xsd.exe с переключателем «/ классы», чтобы увидеть, что он будет делать с этим ...

2

Далее в ответ CruelIO, я разрешила ошибку, добавив:

[XmlRoot("RenderResult", Namespace = "http://mynamespace.uri.org")] 

к классу, который я пытался десериализации. например: код сериализации был:

RenderResult result; 
using (var memoryStream = new MemoryStream(data)) 
{ 
    var xmlSerializer = new XmlSerializer(typeof(RenderResult)); 
    result = (RenderResult)xmlSerializer.Deserialize(memoryStream); 
} 

и мой класс выглядит следующим образом:

[XmlRoot("RenderResult", Namespace = "http://mynamespace.uri.org")] 
public class RenderResult 
{ 
} 
Смежные вопросы