2012-05-10 68 views
8

Proszę o pomoc. Mam błąd podczas deserializacji danych z serwera,Element XML o nazwie "nazwa" z obszaru nazw odnosi się do różnych typów

Górna Element XML „Nazwa” z obszaru nazw „” referencje odrębnych typów Object1.LocalStrings i System.String. Użyj atrybutów XML, aby określić inną nazwę XML lub przestrzeń nazw dla elementu lub typów.

Mam klasy ObjectType, która zawiera właściwości Nazwa i List<SupportedIp>. Klasa SupportedIp zawiera również nazwę Name. Proszę odnieść się do mojego kodu poniżej:

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

Kiedy aplikacja dotrze do XmlSerializer część wyświetla błędów. Widziałem jakiś powiązany post, ale nie ma jednoznacznej odpowiedzi.

Odpowiedz

10

Z tego, co napisałeś, myślę, że problem polega na tym, że masz tę samą nazwę elementu o nazwie (namespace="", name="Name") z dwoma różnymi typami zawartości (typ łańcucha i typ lokalny), co jest nielegalne w xml. Oznacza to, że każdy analizator składni xml powinien zgłosić błąd krytyczny, który został wydrukowany. Rozwiązaniem jest zmiana nazwy elementu lub użycie tej samej nazwy, ale skojarzenie ich z różnymi przestrzeniami nazw. Na przykład zamiast:

[XmlElementAttribute(Namespace = "")] 

można umieścić:

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

Rdzeń Problem wydaje się, że XMLSerializer wykorzystuje poprawności schematu XSD. Oznacza to, że każdy zdefiniowany XmlElementAttribute ma dołączony typ (czytaj więcej z here). Jednym z ograniczeń XSD jest ograniczenie "zgodności deklaracji elementów", co oznacza, że ​​dwa elementy o tej samej nazwie (i przestrzeni nazw) muszą mieć ten sam typ (więcej informacji można znaleźć w artykule here).

Mam nadzieję, że to pomaga.

0

Argument zadeklarowany w nagłówku metody musi być unikalny dla wszystkich metod internetowych w przestrzeni nazw. Argumentem jest znacznik xml najwyższego poziomu mydła: body. Powodzenia.

Powiązane problemy