Avatar
Petr Nymsa
Redaktor
Avatar
Petr Nymsa:

Ahoj, potřeboval bych menší pomoc. API mi vrací následující xml

<?xml version="1.0"?>
<users>
    <user>
        <id>93</id>
        <name>Joost</name>
        <description/>
        <photo/>
        <mail>H.Markovi3@excite.it</mail>
    </user>
</users>

XmlSerializer mi hlásí že xml je nevalidní (Error in XML document (2,2). Nějak nemůžu vyzkoumat co se mu nelíbí.

Kód pro deserializaci

srl = new XmlSerializer(typeof(ObservableCollection<T>));

            XmlReader reader = XmlReader.Create(new StringReader(xml));
            ObservableCollection<T> list = new ObservableCollection<T>();
            list = (ObservableCollection<T>)srl.Deserialize(reader);
            return list;

Používám ho už dlouho a vždy mi fungovalo. Takže někde v tom XML je nejspíše chyba. Výstup XML můžu libovolně upravit - API je má vlastní

Odpovědět 21.4.2014 12:48
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Petr Nymsa
Jan Vargovský:

Prozkoumej vice tu vyjimku.

 
Nahoru Odpovědět 21.4.2014 13:00
Avatar
coells
Redaktor
Avatar
Odpovídá na Petr Nymsa
coells:
  1. nejsem si jistý, jestli XmlSerializer podporuje ObservableCollec­tion, ale v praxi bych to rozhodně nepoužíval
  2. tak jako tak budeš potřebovat vlastní typ označený atributem [XmlRoot], kolekci dej až do něj
  3. při složitější deserializaci musíš serializéru říct, které typy může očekávat, použij konstruktor (Type, Types[])
  4. vytvoř si strukturu v paměti a ulož si ji na disk, ať víš, jak má správně vypadat XML - většinou je potřeba atribut xsi:type

Pracuju se tímhle typem serializace na hodně komplexních XML a vždycky je lepší mít svoje vlastní jednoduché třídy označené atributy na XML serializaci.

 
Nahoru Odpovědět 21.4.2014 13:29
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.