Come deserializzare un documento XML con un prefisso dello spazio dei nomi ma non di ns-il prefisso elementi?

Ho un documento XML da una fonte esterna.

<?xml version="1.0" encoding="utf-8"?>
<ns0:Info xmlns:ns0="http://www.ZomboCorp.com/">
  <Name>Anthony</Name>
  <Job>Developer</Job>
</ns0:Info>

Ho bisogno di deserializzare un oggetto come questo.

public class Info
{
    public String Name { get; set; }
    public String Job { get; set; }
}

Usato come è, il Serializer genera un’ InvalidOperationException

<Info xmlns='http://www.ZomboCorp.com/'> non era previsto.

Se posso aggiungere [XmlElement(Namespace = "http://www.ZomboCorp.com/")] per la definizione di classe, il Serializer restituisce un nuovo Info oggetto null proprietà.

 

2 Replies
  1. 6

    È necessario aggiungere il XmlElement attributo per ogni proprietà, ponendo le proprietà dello spazio dei nomi per una stringa vuota (come lo spazio dei nomi non è ereditaria nella tua situazione).

    Definizione per Info dovrebbe assomigliare a questa:

    XmlRoot(Namespace = "http://www.ZomboCorp.com/")]
    public class Info
    {
        [XmlElement(Namespace = "")]
        public String Name { get; set; }
        [XmlElement(Namespace = "")]
        public String Job { get; set; }
    }

    Allora sarà deserializzare correttamente.

    • Cercare una nuova risposta, ho eseguito questo con XML e che ha funzionato con la proprietà compilato correttamente.
    • Grazie per andare fuori del vostro modo di eseguire il codice. Io +1 vostra risposta anche per questo 🙂
  2. 5

    Ho usato xsd.exe (VS) e generato uno schema dal file XML e quindi un file di classe da schema. È suggerito

    [XmlType(AnonymousType = true, Namespace = "http://www.ZomboCorp.com/")]
    [XmlRoot(Namespace = "http://www.ZomboCorp.com/", IsNullable = false)]
    public class Info
    {
        [XmlElement(Form = XmlSchemaForm.Unqualified)]
        public String Name { get; set; }
        [XmlElement(Form = XmlSchemaForm.Unqualified)]
        public String Job { get; set; }
    }

    Ma, sono stato in grado di ottenere via con

    [XmlType(AnonymousType = true)]
    [XmlRoot(Namespace = "http://www.ZomboCorp.com/")]
    public class Info
    {
        [XmlElement(Form = XmlSchemaForm.Unqualified)]
        public String Name { get; set; }
        [XmlElement(Form = XmlSchemaForm.Unqualified)]
        public String Job { get; set; }
    }
    • Che dire di runtime?, è possibile?

Lascia un commento