2012-05-10 77 views
8

請幫助。我同時從服務器反序列化的數據得到一個錯誤,名稱空間中名爲'name'的XML元素引用不同類型

頂部的XML元素「名稱」從命名空間「」涉及不同類型的 Object1.LocalStrings和System.String。使用XML屬性爲該元素指定另一個XML名稱或命名空間。

我有一個ObjectType類,它包含屬性Name和List<SupportedIp>。 SupportedIp類還包含屬性Name。請參考下面我的代碼:

[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; 
    } 
} 

當應用達到XmlSerializer的部分,顯示錯誤。我見過有些相關的帖子,但沒有答案。

回答

10

從你寫的我認爲問題是你有相同的元素名稱(namespace="", name="Name")與兩種不同類型的內容(字符串類型和localstrings類型),這是不合法的XML。這意味着每個xml解析器都應該提高您打印的致命錯誤。解決方案是更改元素的名稱或使用相同的名稱,但將它們與不同的名稱空間相關聯。例如,而不是:

[XmlElementAttribute(Namespace = "")] 

你可以把:

[XmlElementAttribute(Namespace = "http://test.com/2010/test")] 

的核心問題似乎是,XMLSerializer的使用XSD架構驗證。這意味着您定義的每個XmlElementAttribute都有一個附加類型(從here讀取更多)。其中一個XSD約束是「元素聲明一致」約束,這意味着任何兩個具有相同名稱(和名稱空間)的元素必須具有相同類型(從here中讀取更多)。

希望它有幫助。

0

您在方法頭中聲明的參數必須對名稱空間中的所有Web方法都是唯一的。作爲參數是soap:body的頂層XML標記。祝你好運。

相關問題