Сериализация

4 отговора 364 прегледа
#1

Сериализация

Някой опитвал ли е да сериализира System.Exception - обект? Как избегнахте проблема със свойството TargetSite? И изобщо какъв е смисъла един клас да имплементира ISerializable, ако за да можеш да го сериализираш, трябва да "надлъгваш"

Отговор
в отговор на NetDev #2

Re: Сериализация

Принципно всичко си работи както трябва и аз не съм срещал проблем. Може да бъркаш нещо, постни част от Exception класа.

Отговор
в отговор на NetDev #3

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
Отговор
в отговор на NetDev #4

Re: Сериализация

Благодаря за препоръките, надявам се да са от полза. По отношение на това как да избегна проблема - оказа се, че проблемът е само при ползване на XmlSerializer. Аз го заобиколих като ползвах Binary-сериализация.

Отговор
в отговор на NetDev #5

Re: Сериализация

опитът ми показва, че вградената xml сериализация е супер зле. тва дето си направил е решение, ако ексепшъна ше пътува по нета може да го сериализираш в SOAP (сигурно ше мине), а принципно ако ти трябва непременно читаема XML сериализация, тряаа си го напишеш с XmlReader и XmlWriter ... верно че повече писане, ма пък става :)

Благородникът има само една дума и аз ви дадох своята
Отговор