Хотя я понимаю, что есть похожий вопрос ( Как сериализовать объект Exception в C #? ), и хотя ответы на этой странице были полезны, они не совсем решили проблему или не дали ответ на вопрос. поставленный вопрос
Я полагаю, что вопрос заключался в том, как сериализовать объект, чтобы позволить его преобразовать (десериализовать) в тот же объект. Я пытался использовать решение, данное davogones и Antony Booth , но без добавления базового класса System.Exception
на стороне потребителя (как в: SerializationException: Exception
), оно невозможно использовать эти типы (сами по себе) в качестве реальных объектов исключений, которые могут быть выброшены.
Прежде чем я продолжу, позвольте мне объяснить это последнее утверждение. Я попытался использовать решение Энтони Бута в веб-сервисе (сервис содержит определение для сериализуемого объекта), пытаясь заставить всех потребителей использовать одно и то же исключение (возможно, вместо этого создавая повторно используемый сериализуемый тип исключения) воссоздания всего этого).
К сожалению, поскольку ни один из типов явно не является производным от System.Exception
, вы не можете throw
их, что, очевидно, было бы полезно. Как я упоминал выше, кажется, что добавление : Exception
к определению класса типа на стороне потребителя позволяет создавать объект, но для этого требуется редактировать автоматически сгенерированный код WSDL / веб-службы, который интуитивно кажется плохим / не -поддерживаемая практика для меня (поправьте меня, если я ошибаюсь).
Мой первый вопрос, опять же, можно ли сериализовать System.Exception
или создать производный тип, который можно сериализовать, и, если это возможно, как можно поступить так? Я должен упомянуть, что я посмотрел на то, что кажется официальным способом воссоздать Exception
объект , но, боюсь, я не очень хорошо понимаю это.
Мой второй вопрос касается архитектуры самого System.Exception
. Я хотел бы знать, почему тип System.Exception
помечен как [Serializable]
, когда он был задокументирован и явно предназначен для того, чтобы запретить вам его сериализацию должным образом (по крайней мере, с XML), потому что это Data
объект реализующий IDictionary
?
С MSDN:
В: Почему я не могу сериализовать хеш-таблицы?
A: XmlSerializer не может обрабатывать классы, реализующие интерфейс IDictionary. Это было частично из-за ограничений расписания и частично из-за того, что хэш-таблица не имеет аналога в системе типов XSD. Единственное решение заключается в реализации пользовательской хеш-таблицы, которая не реализует интерфейс IDictionary.
Учитывая, что XML становится (если еще не является) новым стандартом для передачи данных (тем не менее, официально рекомендованным Microsoft), представляется абсурдной глупостью запрещать использование единственного типа объектов в .NET, который может быть выброшен. XML-сериализации.
Я с нетерпением жду возможности услышать некоторые мысли от всех SO (особенно с учетом того, что это мой первый пост).
Если у вас есть вопросы или вам нужны разъяснения, пожалуйста, не стесняйтесь, дайте мне знать.
Примечание: я только что нашел этот пост , который, кажется, отвечает на несколько вопросов, но я предполагаю, что я хотел бы попробовать его самостоятельно. дайте мне знать, если это слишком близко к дубликату, хотя.