2012-05-10 6 views
8

Ayuda. Tengo un error al deserializar los datos del servidor,El elemento XML llamado 'nombre' del espacio de nombres hace referencia a distintos tipos

La parte superior Elemento XML 'Nombre' del espacio de nombres '' hace referencia a tipos distintos Object1.LocalStrings y System.String. Use atributos XML para especificar otro nombre XML o espacio de nombres para el elemento o los tipos.

Tengo una clase ObjectType que contiene las propiedades Name y List<SupportedIp>. La clase SupportedIp también contiene el nombre de propiedad. Por favor refiérase a mi código de abajo:

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

Cuando la aplicación alcanza a XmlSerializer parte, muestra un error. He visto publicaciones algo relacionadas, pero no hay una respuesta concisa.

Respuesta

10

Según lo que escribió, creo que el problema es que tiene el mismo nombre de elemento (namespace="", name="Name") con dos tipos diferentes de contenido (tipo de cadena y tipo de cadenas locales), que es ilegal en xml. Esto significa que cada analizador xml debe generar el error fatal que ha impreso. La solución es cambiar el nombre del elemento o usar el mismo nombre pero asociarlo con diferentes espacios de nombres. Por ejemplo, en lugar de:

[XmlElementAttribute(Namespace = "")] 

se puede poner:

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

El núcleo parece ser que XMLSerializer utiliza la validación del esquema XSD. Lo que significa que cada XmlElementAttribute que defines tiene un tipo adjunto (lee más de here). Una de las restricciones de XSD es la restricción de "Declaraciones de elementos coherentes", lo que significa que dos elementos con el mismo nombre (y espacio de nombres) deben tener el mismo tipo (más información en here).

Espero que ayude.

0

El argumento que declara en el encabezado del método debe ser exclusivo para todos los métodos web en el espacio de nombres. Como el argumento es la etiqueta xml de nivel superior del jabón: cuerpo. Buena suerte.

Cuestiones relacionadas