Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
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 Hartinger
Vlastník
Avatar
Odpovídá na Robert Zemánek (bobánek)
David Hartinger: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
New kid back on the block with a R.I.P
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 Hartinger
Vlastník
Avatar
Odpovídá na Robert Zemánek (bobánek)
David Hartinger: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
15.12.2013 11:35
New kid back on the block with a R.I.P
Avatar
Odpovídá na David Hartinger
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 Hartinger
Vlastník
Avatar
Odpovídá na Robert Zemánek (bobánek)
David Hartinger: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
New kid back on the block with a R.I.P
Avatar
Odpovídá na David Hartinger
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
Tvůrce
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
Tvůrce
Avatar
Odpovídá na David Hartinger
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ý
Tvůrce
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.