Laden...

InvalidOperationException beim Deserialisieren eines XML

Erstellt von w1z4rd2003 vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.419 Views
w1z4rd2003 Themenstarter:in
624 Beiträge seit 2006
vor 13 Jahren
InvalidOperationException beim Deserialisieren eines XML

Guten Tag,

Meine Ausgangslage ist ein XML dass ich deserialisieren möchte, ich bekomme aber eine InvalidOperationException "There is an error in XML document (3,2). Dieser Fehler trifft bei der Linie 'clients = (List<Client>)deserializer.Deserialize(textReader);' vor.

Das ist meine Methode


        static List<Client> DeserializeFromXML()
        {
            XmlSerializer deserializer = new XmlSerializer(typeof(List<Client>));
            TextReader textReader = new StreamReader(@"D:\Temp\Clients.xml");
            List<Client> clients;
            clients = (List<Client>)deserializer.Deserialize(textReader);
            textReader.Close();

            return clients;
        }

und hier das Xml


<?xml version="1.0" encoding="utf-8"?>

<Client>xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
   xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Name>Swisscom</Name>
  <Ini>0</Ini>
  <Xml>1</Xml>
</Client>

Gruss und Danke
w1z4rd

1.985 Beiträge seit 2004
vor 13 Jahren

Hallo w1z4rd2003,

müssen die Schema-Angaben nicht als Tag in einem Element stehen? Oder sind das Element-Daten?

Gruß,
Fabian

"Eine wirklich gute Idee erkennt man daran, dass ihre Verwirklichung von vornherein ausgeschlossen erscheint." (Albert Einstein)

Gefangen im magischen Viereck zwischen studieren, schreiben, lehren und Ideen umsetzen…

Blog: www.fabiandeitelhoff.de

w1z4rd2003 Themenstarter:in
624 Beiträge seit 2006
vor 13 Jahren

Hallo Fabian,

Ich bin mir jetzt nicht sicher ob ich deine Frage richtig verstanden habe aber ich hab eine Klasse die Client heisst und die wie folgt aussieht


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

namespace Swisscom.It.ConfigDB.Model
{
    public class Client
    {
        /// <summary>
        /// Kunden Name 
        /// </summary>
        [XmlElement("ClientName")]
        public string Name { get; set; }

        /// <summary>
        /// Type Ini
        /// </summary>
        [XmlElement("TypeIni")]
        public bool Ini { get; set; }

        /// <summary>
        /// Type Xml
        /// </summary>
        [XmlElement("TypeXml")]
        public bool Xml { get; set; }
    }
}

Da sind die drei Elemente drin die ich im XML drin habe, mit der Methode DeserializeFromXML wird somit ein XMLSerializer erstellt vom typ List<Client>

Z
403 Beiträge seit 2007
vor 13 Jahren

Hallo w1z4rd2003,

wenn es kein tippfehler ist stimmt das XML so auch nicht

Deins

<?xml version="1.0" encoding="utf-8"?>
<Client>xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Name>Swisscom</Name>
<Ini>0</Ini>
<Xml>1</Xml>
</Client>

Beispiel:

<?xml version="1.0"?>
<TestDataXml xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<DataName>testing</DataName>
</TestDataXml>

Du solltest eventuell der Class noch das XmlRootAttribute geben

Gruß André

0
767 Beiträge seit 2005
vor 13 Jahren

also wenn du nicht nur im forum einen tippfehler hast, dann ist das xml invalid. die spitze klammer von

xmlns:xsd="http://www.w3.org/2001/XMLSchema">

wird nirgends geöffnet.

xmlns sind üblicherweise attribute, nicht content eines elements.

...
TheGear war schneller 😃

loop:
btst #6,$bfe001
bne.s loop
rts