Сериализация
4 отговора
364 прегледа
Сериализация
Някой опитвал ли е да сериализира System.Exception - обект? Как избегнахте проблема със свойството TargetSite? И изобщо какъв е смисъла един клас да имплементира ISerializable, ако за да можеш да го сериализираш, трябва да "надлъгваш" 
Re: Сериализация
Принципно всичко си работи както трябва и аз не съм срещал проблем. Може да бъркаш нещо, постни част от Exception класа.
Re: Сериализация
Официално не знам Майкрософт да са признали за този проблем, но скоро ще трябва да се примирят и да извадят някакво решение. Точната грешка е тази:
The property 'TargetSite' on type 'System.Exception' cannot be serialized
because it is decorated with declarative security permission attributes.
Consider using imperative asserts or demands in the property accessors.
Не ми е много ясно какво точно означава това, но според мене проблема е другаде. TargetSite ти връща метода който е генерирал exception от stack-а. Това добре, ама ако метода който е хвърлил exception не е в твоя стек, тогава TargetSite е NULL и сериализацията се прецаква. Примерно, ако application domain A хвръли exception който се хване в application domain B, ще получиш точно същата грешка при сериализация.
За решение, трудно. Може да пробваш да override сериализацията и да проверяваш за null. Или просто трябва да промениш изцяло логиката на exception reporting в твоя случай.
XM TurboCT .. where comfort meets power
The property 'TargetSite' on type 'System.Exception' cannot be serialized
because it is decorated with declarative security permission attributes.
Consider using imperative asserts or demands in the property accessors.
Не ми е много ясно какво точно означава това, но според мене проблема е другаде. TargetSite ти връща метода който е генерирал exception от stack-а. Това добре, ама ако метода който е хвърлил exception не е в твоя стек, тогава TargetSite е NULL и сериализацията се прецаква. Примерно, ако application domain A хвръли exception който се хване в application domain B, ще получиш точно същата грешка при сериализация.
За решение, трудно. Може да пробваш да override сериализацията и да проверяваш за null. Или просто трябва да промениш изцяло логиката на exception reporting в твоя случай.
XM TurboCT .. where comfort meets power
Re: Сериализация
Благодаря за препоръките, надявам се да са от полза. По отношение на това как да избегна проблема - оказа се, че проблемът е само при ползване на XmlSerializer. Аз го заобиколих като ползвах Binary-сериализация.
Re: Сериализация
опитът ми показва, че вградената xml сериализация е супер зле. тва дето си направил е решение, ако ексепшъна ше пътува по нета може да го сериализираш в SOAP (сигурно ше мине), а принципно ако ти трябва непременно читаема XML сериализация, тряаа си го напишеш с XmlReader и XmlWriter ... верно че повече писане, ма пък става :)
Благородникът има само една дума и аз ви дадох своята
Благородникът има само една дума и аз ви дадох своята