2012-05-10 5 views
8

Please help. Ho un errore durante la deserializzazione i dati dal server,L'elemento XML denominato "nome" dallo spazio dei nomi fa riferimento a tipi distinti

L'XML superiore elemento 'Nome' dal namespace '' Riferimenti tipi distinti Object1.LocalStrings e System.String. Utilizzare gli attributi XML per specificare un altro nome XML o spazio dei nomi per l'elemento o i tipi.

Ho un ObjectType di classe che contiene proprietà Name e List<SupportedIp>. La classe SupportedIp contiene anche il nome della proprietà. Si prega di fare riferimento al mio codice qui sotto:

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

Quando l'applicazione raggiunge XmlSerializer parte, display di errore. Ho visto post in qualche modo correlato ma non c'è una risposta concreata.

risposta

10

Da quello che hai scritto penso che il problema è che avete lo stesso nome di elemento (namespace="", name="Name") con due diversi tipi di contenuti (tipo stringa e tipo localstrings), che è illegale in xml. Ciò significa che ogni parser xml dovrebbe sollevare l'errore fatale che hai stampato. La soluzione è modificare il nome dell'elemento o utilizzare lo stesso nome, ma associarli a spazi dei nomi diversi. Per esempio, invece di:

[XmlElementAttribute(Namespace = "")] 

si potrebbe mettere:

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

Il nucleo sembra essere che XMLSerializer utilizza la convalida dello schema XSD. Significa che ogni XmlElementAttribute che hai definito ha un tipo allegato (leggi di più da here). Uno dei vincoli XSD è il vincolo "Elemento di dichiarazione coerente" che significa che tutti e due gli elementi con lo stesso nome (e lo spazio dei nomi) devono avere lo stesso tipo (maggiori informazioni dallo here).

Spero che aiuti.

0

L'argomento dichiarato nell'intestazione del metodo deve essere univoco per tutti i metodi Web nello spazio dei nomi. L'argomento è il tag xml di livello superiore del sapone: body. In bocca al lupo.