2009-03-23 37 views
7

Im cố gắng để deserialize một tệp XML với XmlSerializer, tuy nhiên im nhận được ngoại lệ này:ngoại lệ khi cố gắng deserialize một file xml

"Có một lỗi trong tài liệu XML (1, 2)" Các InnerException là: "<Mymessage xmlns='http://MyMessages/'> không phải là được mong đợi".

Dòng đầu tiên trong tệp XML là gì. tôi đoán là nó có liên quan đến xmlns.

Tôi cố gắng để yêu cầu Google, và sau đó cố gắng thêm dòng sau vào mã của tôi

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

Nhưng tôi vẫn nhận được cùng một ngoại lệ.

+0

bạn có thể chia sẻ các phần có liên quan của tập tin xml xin vui lòng? –

+0

Đây là một câu hỏi cũ nhưng điều quan trọng là phải biết rằng cùng một lỗi có thể được tạo ra do một lớp thiếu một thuộc tính Serializable. –

Trả lời

8

Trong hàm tạo của XmlSerializer i cần thiết để chỉ định không gian tên mặc định, sau khi thực hiện mọi thứ hoạt động tốt

+5

Bạn có thể đưa ra một ví dụ về cách bạn giải quyết vấn đề này không? Tôi nghĩ rằng tôi đang có cùng một vấn đề, nhưng xác định không gian tên mặc định không tạo sự khác biệt. – Jon

3

Vui lòng cung cấp mã tệp XML đầy đủ để giúp hiểu vấn đề tốt hơn.

Cũng đặt này như dòng đầu tiên trong file xml và xem có giải quyết được vấn đề

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

Tôi thực sự khuyên bạn nên sử dụng "utf-8" thay vì iso-8859-1 cho tất cả công việc dịch vụ web liên tục! –

1

Có vẻ như bạn có một tập tin xml borked. cách dễ dàng để tìm hiểu:

  • thử tải nó vào một khán giả xml
  • hoặc chỉ cần đảm bảo nó có một phần mở rộng .xml và tải trong VS hoặc IE
  • hoặc chạy xsd.exe qua nó

Nếu họ khiếu nại, thì xml chắc chắn bị hỏng. Nếu chúng hoạt động tốt và hiển thị dữ liệu của bạn, thì bạn có thể có các thuộc tính tuần tự hóa sai. Hãy thử sử dụng xsd.exe bằng nút chuyển "/ classes" để xem nó sẽ làm gì với nó ...

2

tiếp tục để đáp ứng CruelIO, tôi giải quyết các lỗi bằng cách thêm:

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

đến lớp mà tôi đã cố gắng để deserialize. ví dụ: mã serialization là:

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

và lớp học của tôi trông như thế này:

[XmlRoot("RenderResult", Namespace = "http://mynamespace.uri.org")] 
public class RenderResult 
{ 
} 
Các vấn đề liên quan