C# la Serializzazione XML per Oggetto

Sto cercando di serializzatore XML in un oggetto. Io però, avendo qualche difficoltà. Ho vissuto forse registrazioni online per quanto riguarda la risposta, ma non sono stato in grado di capirlo. Per favore, mi spiego:

Ho il seguente codice XML che voglio serialise:

<Import_RootObject>
 <Organizations>
  <Import_Organization OrgNr="xxxx">
   <Events>
    <Import_Event StartTime="2012-01-01 09:00:00" EndTime="2012-01-02 12:00:00">
    <Players>
     <Import_Player PersonNummer="1111" />
     <Import_Player PersonNummer="2222" />
     <Import_Player PersonNummer="3333" />
     <Import_Player PersonNummer="4444" />
    </Players>
   </Import_Event>
  </Events>
 </Import_Organization>
</Organizations>

Im utilizzando quattro classi di catturare questo XML:

using System;
using System.Collections.Generic;
using System.Xml.Serialization;

[XmlRoot("Import_RootObject")]
public class Import_RootObject
{
    [XmlArray("organizations")]
    [XmlArrayItem("organizations")]
    public List<Import_Organization> Organizations { get; set; }
}



using System;
using System.Collections.Generic;
using System.Xml.Serialization;

public class Import_Organization
{
    [XmlAttribute("orgnr")]
    public string OrgNr { get; set; }

    [XmlArray("events")]
    [XmlArrayItem("events")]
    public List<Import_Event> Events { get; set; }

}



using System;
using System.Collections.Generic;
using System.Xml.Serialization;

public class Import_Event
{
    [XmlAttribute("starttime")]
    public DateTime StartTime { get; set; }
    [XmlAttribute("endtime")]
    public DateTime EndTime { get; set; }

    [XmlArray("players")]
    [XmlArrayItem("players")]
    public List<Import_Player> Players { get; set; }

}



using System;
using System.Collections.Generic;
using System.Xml.Serialization;

public class Import_Player
{
    [XmlAttribute]
    public string PersonNummer { get; set; }

}

Il codice che uso per deserializzare è:

XmlSerializer serializer = new XmlSerializer(typeof(Import_Organization));
Import_RootObject ei = (Import_RootObject)serializer.Deserialize(new StringReader(sb.ToString()));

E l’errore che ricevo è:

There is an error in XML document (1, 2).
<Import_RootObject xmlns=''> was not expected.

Qualcuno sa cosa mi manca qui? Spero che qualcuno può essere di aiuto!

Riguarda,

Bob

  • Di Ricerca di Google con le parole chiave “C’è un errore nel documento XML (1, 2).”, si otterrà un sacco di post su questo
  • la maggior parte dei quali completamente mancanti punto per questo esempio…

 

One Reply
  1. 9

    La prima evidente errore è:

    XmlSerializer serializer = new XmlSerializer(typeof(Import_Organization));

    che, ovviamente, dovrebbe essere:

    XmlSerializer serializer = new XmlSerializer(typeof(Import_RootObject));

    Tuttavia, si dovrebbe anche notare che xml è case-sensitive:

    [XmlArray("organizations")]
    [XmlArrayItem("organizations")]

    dovrebbe essere:

    [XmlArray("Organizations")]
    [XmlArrayItem("Import_Organization")]

    per abbinare il codice xml; allo stesso modo

    [XmlArray("events")]
    [XmlArrayItem("events")]

    dovrebbe essere:

    [XmlArray("Events")]
    [XmlArrayItem("Import_Event")]

    e:

    [XmlArray("players")]
    [XmlArrayItem("players")]

    dovrebbe essere:

    [XmlArray("Players")]
    [XmlArrayItem("Import_Player")]

    Si noti, inoltre, che <Players> è non un discendente di Import_Event – è parte di Events. Questo rende la vita un po ‘ complessa.

    Abbiamo poi notare che le date non sono “ora di inizio” /”ultimi tempi”, quindi possiamo semplificare per:

    [XmlAttribute]
    public DateTime StartTime { get; set; }
    [XmlAttribute]
    public DateTime EndTime { get; set; }

    … tranne quelli di data/tempi di xml non valido data/tempi – sono in un formato non corretto. Così si potrebbe avere per il trattamento di quelli come string dati per ora.

    Infine, xml non è valido – non aver chiuso l’elemento radice.

    Francamente, non mi stupisce il serializzatore non piaceva 🙂

    • Ciao Marc, ci sono molte possibili ragioni per questo “C’è un errore nel documento XML (1, 2).” errori, siete d’accordo?
    • Ciao marco, hai la mia eterna gratitudine! Ho implementato le modifiche e ora funziona come un fascino! Grazie per la rapida e precisa risposta!
    • certo – check InnerException per vedere di che problema si tratta

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *