Исключение при попытке десериализации XML-файла - PullRequest
7 голосов
/ 23 марта 2009

Я пытаюсь десериализовать файл XML с помощью XmlSerializer, однако получаю следующее исключение:

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

Какая самая первая строка в файле XML. я думаю, что это как-то связано с xmlns.

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

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

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

Ответы [ 4 ]

8 голосов
/ 25 марта 2009

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

3 голосов
/ 23 марта 2009

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

Также поместите это как первую строку в xml-файл и посмотрите, решит ли это проблему

 <?xml version="1.0" encoding="utf-8"?>
2 голосов
/ 19 сентября 2012

В дополнение к ответу 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
{
}
1 голос
/ 23 марта 2009

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

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

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

...