Instance ToString   zodpovězená otázka

C#

Ahoj,

potřeboval bych rozložit nějaký object na string, ze kterého by se opětovně dal celý objekt složit (instance)

Něco, jako je výstup serializace. Jak to funguje?

Potřebuji něco jako:

string Data = MyCustomClass.GetString();

kde výstup bude "0w8d5e645dfga65er46qrg"... prostě nějaká data, ze kterých mohu opět MyCustomClass sestavit, typu string.

Dá se to?

Bez přímého použití BinaryFormatter?

Díky

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

P.S.: Než označíte můj příspěvek jako nesmysl, nejedná se mi o nahrazení BinaryFormatteru a napsání vlastní technologie. Chci jen vědět, jak to funguje ;-)

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Například: Udělejte si hlavní serializační třídu. Té předáte objekt k serializaci a cíl serializace (soubor, stream atp.). Ten může vnitřně komunikovat s nějakým seznamem serializačních tříd (implementující například nějaký váš interface). Vnitřně si pak pro členy objektu zavolá tyto serializační třídy a ty budou mít v sobě kód, který vytvoří například binární nebo jinou podobu.

Záleží na tom, čeho chcete dosáhnout.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Jde mi o to, když vytvořím nějakou vlastní třídu s nějakými vlastnostmi, a tu serializuji do souboru (binaryformatter) a otevřu jej v poznámkovém bloku, tak ten obsah co je tam, z čeho se skládá? Co tam je? Jak se to všechno dostane do té podoby?

jak z třeba Class1 vznikne ten obsah souboru?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Panebože to jsou dotazy... Proč se to asi jmenuje binární serializace? Pokud potřebujete nutně vědět jak to funguje (k čemu vám to asi tak bude, když nevíte ani základní věci), podívejte se na tu třídu Reflectorem. Pokud potřebujete čitelnou podobu v obyčejném textovém formátu, tak použijte XML serializaci jak jsem psal (ale ta bohužel neserializuje kompletně celou strukturu třídy včetně Private proměnných).

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Panebože to jsou dotazy...?

Proč? Věřím, že takový skvělý programátor - jako jste Vy pane Linharte - má přehled o všem a o všech, ale bohužel doposud nejsem vzdělaný jako Vy, a moje zvídavost mě žene se zeptat.

S binární serializací pracuji téměř pořád, ale nikdy jsem nechápal, co se děje uvnitř, a jak to vlastně funguje. Prostě jsem přišel, a použil to.

Je snad něco špatného na tom, že nechci pouze věci používat, ale také jim velmi dobře rozumět?

Samozřejmě jsem hledal nějaké informace i na internetu, ovšem odpověď, která by mě dostatečně uspokojila jsem nenašel, a proto jsem přišel sem :-)

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Jak to zhruba funguje (projít rekurzivně všechny členy třídy pomocí Reflection a uložit jejich hodnoty do souboru) musí být jasné každému, kdo to alespoň jednou použil. Pokud to potřebujete vědět naprosto přesně, nechápu proč jste nepoužil Reflector na metodu Serialize a nezobrazil si tak její zdrojový kód.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Detailní popis formátu je zbytečné znát, pokud ho potřebujete znát, musíte si rozlousknout binární data sám.

Jinak obecný způsob serializace je jednoduchý.

Serializer všechny komplexní objekty projde a zapíše do souboru jméno vlastnosti nebo pole, které zpracovává a nálesledně vloží serializovanou hodnotu tohoto pole. Pokud je hodnota opět komplexní typ, tak pokračuje rekurzivně stejným způsobem, dokud nenarazí na jednoduché typy (číslo, string, bitová hodnota atp.) a ty zapíše v pokud možno nejúspornějším formátu. Tedy například 4-bytový long zapíše jako 4 byty.

Při deserializaci se provede postup naopak - čte se binární soubor a objekt se vlastnost po vlastnosti zpět sestavuje. Zajímavé je například to, že se nevolá kontruktor objektu.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Děkuji za vyčerpávající odpověď. Nemůžu sice říct, že teď už tomu rozumím na 100%, ale jsem tomu blíž než kdykoliv před tím. Zbývající si snad dohledám :-)

Ještě jednou děkuji :-)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Nestačil by použít existující XML serializátor a serializovat objekt do StringWriteru?

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback