Válí se ti projekty v šuplíku? Dostaň je mezi lidi a získej cool tričko a body na profi IT kurzy v soutěži ITnetwork summer 2017!
Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)

Diskuze: XmlSerializer - vyjímka při serializaci

C# .NET .NET (C# a Visual Basic) XmlSerializer - vyjímka při serializaci American English version English version

Aktivity (1)
Avatar
Robert Zemánek (bobánek):15.12.2013 11:21

zdarec, podle zdejšího návodu se pokouším serializovat Observable kolekci:

XmlSerializer serializer = new XmlSerializer(subSystem.GetType());
            using (StreamWriter sw = new StreamWriter("subsystemdata.xml"))
            {
                try
                {
                    serializer.Serialize(sw, subSystem);
                }
                catch (Exception ex)
                {
                    throw (ex);
                }
            }

v subData mám dva konstruktory jeden s parametrem, druhý bez parametrický, ale při pokusu uložit my to hází výjimku. v Subadata jsou objekty které mají vlastnosti int, string a Observable collection.
vyhozená vyjímka:

There was an error reflecting type 'System.Collections.ObjectModel.ObservableCollection`1[EatJob.subSystem]'.

napadá mě že xmlserializer neumí serializovat ObservableColl. ale netuším.
Předem díky ;)

Editováno 15.12.2013 11:34
Odpovědět 15.12.2013 11:21
Jsem jako holub.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Robert Zemánek (bobánek)
David Čápka:15.12.2013 11:24

A co je v kolekci za objekty? Všechny jejich atributy musí být serializovatelné. Za chvíli publikuji seriál pro WPF kde se přesně tohle dělá, tak se na to můžeš podívat.

Nahoru Odpovědět 15.12.2013 11:24
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Robert Zemánek (bobánek):15.12.2013 11:30

mám to takhle

private ObservableCollection<Meal> subSystem;

class Meal
 property - string, int, ObservableCollection<Composition>

class Composition
 property - double,string, double
  • ve třídách jsou ještě nějaké metody
Nahoru Odpovědět 15.12.2013 11:30
Jsem jako holub.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Robert Zemánek (bobánek)
David Čápka:15.12.2013 11:35

OC určitě serializovat lze. Možná ale nejde serializovat kolekci, která obsahuje další kolekci. Zkus ji z Meal vyndat.

Nahoru Odpovědět  +1 15.12.2013 11:35
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Odpovídá na David Čápka
Robert Zemánek (bobánek):15.12.2013 11:38

je to tak, nelze to ani s obyčejným listem

Editováno 15.12.2013 11:41
Nahoru Odpovědět 15.12.2013 11:38
Jsem jako holub.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Robert Zemánek (bobánek)
David Čápka:15.12.2013 11:48

Pokud máš takhle složitý datový model, vyplatí se ti použít třeba MS-SQL Compact Edition.

Nahoru Odpovědět 15.12.2013 11:48
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Odpovídá na David Čápka
Robert Zemánek (bobánek):15.12.2013 11:52

dík za tip, ale prozatím jsem to vyřešil tak, že každý Meal ukládám do xml zvlášť, tudíž mám zatím 10 souborů, je to sice nepraktické, ale postačující

Nahoru Odpovědět 15.12.2013 11:52
Jsem jako holub.
Avatar
coells
Redaktor
Avatar
Odpovídá na Robert Zemánek (bobánek)
coells:15.12.2013 16:12

Podle výjimky máš typ ObservableCollec­tion<subSystem>, který nejde serializovat. Ale podle toho, co uvádíš ve svých třídách, nic takového neexistuje, takže jsi neuvedl všechny třídy.

Tip na dálku: chybí ti defaultní konstruktor na typu subSystem.

 
Nahoru Odpovědět 15.12.2013 16:12
Avatar
coells
Redaktor
Avatar
Odpovídá na David Čápka
coells:15.12.2013 16:15

XmlSerializer umí serializovat libovolně složité objekty. There was an error reflecting type 'XXX' znamená, že typ XXX nesplňuje podmínky pro serializaci - např. tam chybí defaultní konstruktor.

 
Nahoru Odpovědět 15.12.2013 16:15
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Robert Zemánek (bobánek)
Jan Vargovský:15.12.2013 16:31

Máš všechny třídy veřejné a vlastnosti mají public get i set? Plus to, co říká coells nademnou.

 
Nahoru Odpovědět 15.12.2013 16:31
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 10 zpráv z 10.