Pergunta

O que é a maneira correta de fazer uma .NET exceção personalizada serializável?
e são todas as exceções .NET serializável? ...

Por que meus exceções ser serializável?
Alguém disse que "pode ??ser considerado um bug" se uma exceção personalizada definida por uma biblioteca de terceiros, não é serializável. Por quê?

Por que são exceções diferente do que outras classes a este respeito?

Foi útil?

Solução

Porque suas exceções podem precisar de ser empacotado entre diferentes AppDomains e se eles não estão (corretamente) Serializable você perderá informações de depuração precioso. Ao contrário de outras classes, você não terá controle sobre se a sua exceção será comandada -. Ele irá


Quando eu quero dizer "você não vai ter o controle" Quero dizer que as classes que você cria geralmente têm um espaço finito de existência e da existência é bem conhecida. Se é um valor de retorno e alguém tenta chamá-lo em um AppDomain diferente (ou em uma máquina diferente) que irão receber uma falha e pode apenas dizer "Não usá-lo dessa forma." O chamador sabe que eles têm para convertê-lo em um tipo que pode ser serializado (envolvendo a chamada de método). Entretanto, desde que as exceções são borbulhou até o topo se não for pego eles podem transcender as fronteiras AppDomain que você nem sabia que você tinha. Seu exceção aplicativo personalizado 20 níveis de profundidade em um AppDomain diferente pode ser a exceção reportada no Main () e nada ao longo do caminho vai convertê-lo em uma exceção de serializado para você.

Outras dicas

Além de resposta de Talljoe, suas exceções podem ser passadas através de Web Services, bem como, neste caso, as necessidades de exceção para ser serializado / deserializable para que possa ser transformado em XML e transmitido através do Serviço Web

Eu acho que o padrão para todas as classes devem ser Serializable a menos que contenham uma classe que não é explicitamente serializável. É irritante para não ser capaz de transferir uma classe só porque alguns designer de não pensar sobre isso.

A mesma coisa com "Final", todas as variáveis ??devem ser "Final", por padrão, a menos que especificamente dizer que eles são "Mutante".

Além disso, eu não tenho certeza se faz sentido ter uma variável que não é privado.

Oh bem, necessidade de criar minha própria linguagem.

Mas a resposta é, você não sabe como sua exceção será usado e eles são assumidos para ser capaz de ser jogado através de chamadas remotas.

Outro lugar onde os objetos necessários para ser serializado é Asp.Net Session. Nós armazenamos última exceção na sessão e não exceções serializáveis ??precisa de tradução extra para armazenar os seus detalhes como serializável (especificando exceção original como interno não ajuda)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top