Odhalujeme .net - Deserializace - řešení
Aneb, jak se také nedočkat správné odpovědi. Zřejmě jsem zvolil velice záludnou otázku a přestože si ji přečetlo jistě více jak 70 lidí, žádný se nepokusil o její zodpovězení.
Nebudu tedy více napínat všechny ty, kteří čekají na správné řešení. Problémem, na který jsem narazil, bylo zpracovávání tzv. bílých znaků, whitespacehandling. Jak už jsem se zmínil, bylo potřeba serializovat a zpětně deserializovat malé konfigurační objekty a mezi jednotlivými vlastnostmi se objevila i samotná mezera.
Ta se ovšem při použití vstupního parametru typu StringReader nepřevedla zpět. Tudíž bylo nutné explicitně vytvořit XmlTextReader a teprve ten použít pro deserializaci xml řetězce. Pokud se podíváte blíže na implementaci metody Deserialize() např. pomocí Reflectoru, zjistíte, že se interně vytváří právě XmlTextReader a nastavuje se mu property WhitespaceHandling. A právě v nastavení této property ležel ten hlavní důvod a úskalí celého řešení.
Takže cena pro tuto chvíli zůstává pro mě.
4 Comments
Rene said
Zdravim Jardo,
testuji funkcnost komentaru. Protoze kdyz jsem na tvoji hadanku odpovidal, tak ti moje odpoved nedorazila nebo neprosla.
BTW: Strefil jsem se ;)
said
<p>Ahoj René, tak jsem prošel celou DB a tvůj komentář jsem nenašel. Těch nevyžádaných (pouze url) zase tolik nemám, abych náhodou smazal zrovna tvůj. Tak teď nevím, zda nezačít podezírat CS. Pravda, těch komentářů tu tolik nemám, takže je klidně možné, že to občas zahapruje. Díky</p>
<p>BTW: tak teď si nejsem jist, že by skutečně chybka při přidávání druhého komentáře v pořádí?</p>
Rene said
<p>Nevim Jardo, komentar jsem poslal a pak se CS yacal chovat "divne". Myslim, ze se objeila nejaka chybova stranka.</p>
<p>Pokud by se to opakovalo, dam ti vedet. </p>
said
<p>Tak se nakonec nejednalo o chybu CS ale moji. Mám vložené některé CS moduly a jeden z nich nepovolil víc jak jeden komentář k příspěvku. Tímto se omlouvám. Díky</p>