2012-05-10 30 views
8

Xin vui lòng trợ giúp. Tôi gặp lỗi khi đang deserializing dữ liệu từ máy chủ,Phần tử XML có tên 'tên' từ tham chiếu không gian tên các loại riêng biệt

Phần tử XML 'Tên' từ trên không gian tên '' tham chiếu các loại riêng biệt Object1.LocalStrings và System.String. Sử dụng các thuộc tính XML để chỉ định một tên hoặc không gian tên XML khác cho phần tử hoặc các loại.

Tôi có loại ObjectType có chứa các thuộc tính Tên và List<SupportedIp>. Lớp SupportedIp cũng chứa tên thuộc tính. Vui lòng tham khảo mã của tôi dưới đây:

[XmlRootAttribute("SupportedIp", Namespace = "http://test.com/2010/test", IsNullable = false)] 
public partial class SupportedIp 
{[XmlElementAttribute(Namespace = "")] 
    public string Name 
    { 
     get; 
     set; 
    } .... } 


[GeneratedCodeAttribute("xsd", "2.0.50727.1432")] 
[SerializableAttribute()] 
[DebuggerStepThroughAttribute()] 
[DesignerCategoryAttribute("code")] 
[XmlTypeAttribute(Namespace = "http://test.com/2010/test")] 
[XmlRootAttribute("ObjectType", Namespace = "http://test.com/2010/test", IsNullable = false)] 
public partial class ObjectType 
{ 

    /// <remarks/> 
    [XmlElementAttribute(ElementName = "", Namespace = "")] 
    public LocalStrings Name 
    { 
     get; 
     set; 
    } 

    /// <remarks/> 
    [XmlArrayAttribute(ElementName = "Supportedip", Namespace = "")] 
    [XmlArrayItemAttribute(IsNullable = false, Namespace = "")] 
    public List<Supportedip> Supportedip 
    { 
     get; 
     set; 
    } 
} 

Khi ứng dụng đạt đến XmlSerializer phần, hiển thị lỗi. Tôi đã nhìn thấy một số bài viết liên quan nhưng không có câu trả lời trùng nhau.

Trả lời

10

Từ những gì bạn đã viết Tôi nghĩ rằng vấn đề là bạn có cùng tên phần tử (namespace="", name="Name") với hai loại nội dung khác nhau (loại chuỗi và kiểu địa phương), bất hợp pháp trong xml. Điều này có nghĩa là mọi trình phân tích cú pháp xml sẽ tăng lỗi nghiêm trọng bạn đã in. Giải pháp là thay đổi tên của phần tử hoặc sử dụng cùng tên nhưng liên kết chúng với các không gian tên khác nhau. Ví dụ thay vì:

[XmlElementAttribute(Namespace = "")] 

bạn có thể đặt:

vấn đề
[XmlElementAttribute(Namespace = "http://test.com/2010/test")] 

Cốt lõi dường như là XMLSerializer sử dụng XSD schema xác nhận. Có nghĩa là mỗi XmlElementAttribute bạn xác định có một loại đính kèm (đọc thêm từ here). Một trong những ràng buộc XSD là ràng buộc "Tuyên bố phần tử" nhất quán có nghĩa là bất kỳ hai phần tử nào có cùng tên (và không gian tên) phải có cùng loại (đọc thêm từ here).

Hy vọng điều đó sẽ hữu ích.

0

Đối số bạn khai báo trong tiêu đề phương thức phải là duy nhất cho tất cả các phương thức web trong không gian tên. Vì đối số là thẻ xml cấp cao nhất của xà phòng: body. Chúc may mắn.

Các vấn đề liên quan