2009-03-23 42 views
7

Im próby deserializacji plik XML z XmlSerializer, jednakże im uzyskiwanie ten wyjątek:Wyjątek podczas próby deserializacji pliku xml

"wystąpił błąd w dokumencie XML (1, 2)" The InnerException jest: "<Mymessage xmlns='http://MyMessages/'> nie był oczekiwany ."

Co jest pierwszą linią w pliku XML. Domyślam się, że ma to coś wspólnego z xmlns.

Próbowałam poprosić Google, a następnie próbował dodać następującą linię do mojego kodu

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

Ale nadal uzyskać ten sam wyjątek.

+0

można udostępnić odpowiednią część pliku xml proszę? –

+0

To jest stare pytanie, ale należy pamiętać, że ten sam błąd może zostać wygenerowany, ponieważ klasa nie ma atrybutu Serializable. –

Odpowiedz

8

W konstruktora XmlSerializer mi potrzebne do określenia domyślnej przestrzeni nazw, po zrobieniu, że wszystko działało w porządku

+5

Czy możesz podać przykład kodu rozwiązanego problemu? Myślę, że mam ten sam problem, ale określenie domyślnej przestrzeni nazw nie robi różnicy. – Jon

3

Proszę podać pełny kod pliku XML, aby lepiej zrozumieć problem.

również umieścić to jako pierwsza linia w pliku xml i sprawdzić, czy to rozwiązuje problem

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

Zdecydowanie zaleca się używanie "utf-8" zamiast iso-8859-1 dla wszystkich interopertowalnych prac serwisowych! –

1

Brzmi jak masz borked pliku XML. Proste sposoby, aby dowiedzieć się:

  • wkładaj go do widza xml
  • lub po prostu upewnić się, że posiada rozszerzenie .xml i obciążenia w VS lub IE
  • lub uruchomić xsd.exe nad nim

Jeśli skarżą się, to plik XML jest z pewnością uszkodzony. Jeśli działają poprawnie i wyświetlają dane, prawdopodobnie masz nieprawidłowe atrybuty serializacji. Spróbuj użyć xsd.exe pomocą przełącznika „/ classes”, aby zobaczyć, co byłoby z nim zrobić ...

2

nawiązaniu do odpowiedzi CruelIO jest, postanowiłem błąd dodając:

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

do klasy, które starałem się deserializowania. np: kod serializacji było:

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

i moja klasa wyglądała tak:

[XmlRoot("RenderResult", Namespace = "http://mynamespace.uri.org")] 
public class RenderResult 
{ 
} 
Powiązane problemy