Quels types d'exceptions la méthode XmlSerializer.Deserialize peut-elle lancer?
Pour cette méthode, XmlSerializer.Deserialize
quels sont les types d'exception peut être levée? XmlException
? InvalidOperationException
? Je n'ai trouvé aucune description de l'exception de l'information à partir de cette méthode. Ma question est quels sont les types d'exception pourrait être levée à partir de cette méthode?
http://msdn.microsoft.com/en-us/library/dsh84875.aspx
Je suis en utilisant VSTS2008 + C# + .Net.
merci d'avance,
George
source d'informationauteur George2
Vous devez vous connecter pour publier un commentaire.
Ressemble principalement
InvalidOperationException
.Si vous allez par le biais de la documentation pour chacune des surcharges, il vous donnera plus de détails. Voir, par exemple,
XmlSerializer.Méthode Deserialize (XmlReader)
La
InvalidOperationException
contiendra plus de détails sur l'erreur spécifique dans sonInnerException
propriété.Edit:
La
XmlSerializer.Méthode Deserialize (XmlSerializationReader)
pouvez jeter unNotImplementedException
mais c'est une API interne et n'est pas destiné à être utilisé par votre code, donc ne vous inquiétez pas à ce sujet.Edit 2:
Ce code:
jette:
De sorte qu'il ressemble vraiment à ce cadre sera toujours jeter un
InvalidOperationException
.Vraiment, sauf si vous êtes inquiet au sujet de, à tort, d'intercepter les exceptions comme
ThreadAbortException
vous êtes probablement plus sûr d'attraper tous exceptions...Edit 3:
À l'aide de Réflecteur: Le
Deserialize(stream)
méthode lit le flux à l'aide d'unXmlTextReader
et appelle laXmlSerializer.Méthode Deserialize (XmlReader, String)
. Cette méthode déclenche uneInvalidOperationException
sur l'erreur (selon les docs).Edit 4:
Deserialize(stream)
pouvez également jeter unNullReferenceException
sistream
est nul, parce qu'il appelle laXmlTextReader(Stream)
constructeur.Cela et d'autres très pratique conseils sur les exceptions dans le XmlSerializer peut être trouvé sur le document Résolution des Problèmes Communs avec le XmlSerializer.
George, parce qu'il n'y est aucune exception contrat .NET, la meilleure pratique est d'attraper toutes les exceptions spécifiques que vous souhaitez effectuer un traitement spécial pour les, mais aussi avoir un fourre-tout gestionnaire d'exception qui traite de tous les échecs de manière appropriée.
J'ai mis en place plusieurs sérialisation XML à l'aide de solutions intégrées .NET la sérialisation, et, dans tous les cas, juste utilisé un fourre-tout sauf bloc, ce qui marche le innerexceptions de l'exception interceptée, l'ajout de tous les messages d'erreur et d'exception types de classe à un message de la chaîne. En faisant comme cela a toujours fourni assez d'informations pour déboguer toute la sérialisation.
Sur une note connexe, ce que j'ai l'habitude de faire est d'ajouter un journal de débogage de niveau qui enregistre le xml complet à ma demande du journal, afin que je puisse l'inspecter pour essayer de comprendre ce mal lors du débogage d'un serilization question.