2010-01-29 5 views
0

Comment sérialiser une liste d'objets Exception (y compris les exceptions dérivées, par exemple FileNotFoundException) avec DataContractSerializer?DataContractSerializer et List (Of Exception)

Je reçois toujours une erreur sur le sérialiseur ne connaissant pas les types dans la liste, donc j'ai conçu une solution de contournement.

Il avait l'air quelque chose comme ceci:

Dim XmlSerializer As New DataContractSerializer(_ 
    ExceptionsList.GetType(), ExceptionsList.Select(Function(i) i.GetType)) 
XmlSerializer.WriteObject(Stream, List) 

Cela fonctionne. Je viens d'ajouter tous les différents types d'exception à la liste des types connus et cela fonctionne. Mais à propos de la désérialisation, je suis coincé. Le problème est que je ne connais pas les types d'exceptions stockées dans le fichier à l'avance.

Répondre

0

Je pense que vous êtes SOL. Le sérialiseur doit connaître les types qui peuvent être dans l'entrée. Vous pouvez essayer d'utiliser le NetDataContractSerializer. Cela génère des métadonnées de type en plus des données sérialisées.

+0

Cela fonctionne merci, je me demande pourquoi vous ne pouvez pas faire cela avec le sérialiseur ordinaire. – prof23030

+0

Parce que le sérialiseur régulier se contente de sérialiser au format XML interopérable. Vous devez lui dire quels types sont possibles, sinon il ne peut pas désérialiser. Le 'NetDataContractSerializer' contourne cela en ajoutant des métadonnées de type au XML. C'est aussi pourquoi vous ne pouvez pas l'utiliser pour communiquer avec un service ou un client non-NET. –

+0

Je viens de découvrir que NetDataContractSerializer ne peut pas sérialiser en moyenne confiance (je suis sur l'hébergement partagé, si j'essaie de sérialiser je reçois une exception de sécurité), donc je suppose que je vais devoir trouver un autre moyen. – prof23030

0

Vous pouvez essayer de déballer les exceptions allant dans le sérialiseur vers System.Exception. Je ne sais pas si cela aurait un impact réel, mais au moins le type qui passe peut être considéré comme quelque chose de standard.

(tourné dans l'obscurité)

Questions connexes