2010-09-15 2 views
3

J'ai essayé dans quelques différentes façons d'obtenir XmlSerializer.Deserialize pour retourner null mais il ne semble pas possibleXmlSerializer.Deserialize peut-il jamais renvoyer une valeur nulle?

J'ai essayé avec un nul être de classe, xml malformated, xml bien formaté.

Je pourrais manquer quelque chose d'évident ici, mais est-ce possible?

Juste pour clarifier donner une classe MyClass sérialisable Je veux un test similaire à ce qui suit pour passer

[Fact] //this is a the test attribute when using xUnit 
public void When_xml_Something_Then_serialize_returns_null() 
{ 
    string serializedObject = "<?xml version=\"1.0\" encoding=\"utf-8\"?><MyClass xmlns:xsi=\"http://www.w3asdsadasdasd.org/2001/XMLSchema-instance\"></MyClass>"; 
    using (var stringReader = new StringReader(serializedObject)) 
    { 
     Assert.Null(new XmlSerializer(typeof(MyClass)).Deserialize(stringReader)); 
    } 
} 

Essayé choses différentes dans la chaîne sérialisée, et je soit obtenir une exception ou une instance vide MyClass :(Merci NOTE: il y avait une faute de frappe dans cette question, il est maintenant corrigé

NOTE 2: pour une

+0

De quelle méthode parlez-vous? XmlSerializer.Serialize renvoie void, donc il ne peut pas retourner null. – Sjoerd

+0

putain, je veux dire Désérialiser – roundcrisis

+0

Alors, comment as-tu fait ton test d'unité passé? –

Répondre

11

look réponse plus détaillée aux commentaires Oui, 491.peut renvoyer null lorsque l'entrée ne contient pas le code XML attendu. Ceci est souvent vu lorsqu'il y a confusion des espaces de noms XML. Si l'entrée contient un élément racine avec le nom attendu, mais dans un espace de noms différent, alors null sera retourné.

Cela se voit souvent lorsque les services Web ASMX ou avec des références Web, en particulier les références Web contre les services de type RPC, où les messages sont décrits en termes de XSD type du message, et non en termes de element .

+0

vous avez raison (ma faute de frappe), a corrigé la question – roundcrisis

+0

essayé quelques choses différentes sur l'espace de noms et le test ci-dessus est en panne, des indices? – roundcrisis

+0

Mettez '[XmlRoot (Namespace =" http://example.org ")]' sur 'MyClass' et réessayez. –

0

Apparemment, vous pouvez view ou download le code de la partie System.Xml du framework .NET. Cela vous permet de regarder dans le code source pour déterminer quand il renvoie null.

Questions connexes