7
votes

La désérialisation XML échoue sur l'élément vide

J'ai un document XML qui ressemble également à la similarité xxx pré>

il échoue à sérialiser sur cet objet p> xxx pré>

Ça échoue car la plaquette de paramètre vide élément, car s'il contient des éléments d'enfant, il désère bien. p>

Comment puis-je obtenir cela pour travailler? p>

Ceci est mon code de désérialisation P>

var serializer = new XmlSerializer(typeof(Report));
return (Report)serializer.Deserialize(source.CreateReader());


6 commentaires

Par intérêt, cela fonctionne-t-il bien s'il est ?


Non, mais le retirer complètement lui permet de sérialiser.


Que voulez-vous stocker exactement dans un xelement dans votre fichier XML alors ?? Semble un peu étrange .....


@marc_s, il est plus XML, mais il n'est pas «fortement typé», comme le reste du fichier XML est. Ce n'est même pas nécessaire si le rapport n'a pas de paramètres.


Pourquoi pas juste ajouter [xmlelement (islamlable = true)]


@Dan, parce que ce n'est pas nul. Et je l'ai essayé et ça n'a pas fonctionné: p


4 Réponses :


1
votes

Il ressemble au contenu de xelement - si pas null - ne peut pas être un élément XML vide. En d'autres termes, vous ne seriez pas en mesure de sérialiser que xml dans votre exemple d'une représentation / une instance en mémoire de votre rapport rapport .


2 commentaires

C'est la conclusion que je suis venue, j'ai parlé au fournisseur de ce XML pour éliminer les éléments nuls


Cela ressemble à un symptôme de ne pas sérialiser correctement le XML dans le premier cas, ce qui est probablement fait avec .NET 1.0 XMLSérialiseur. Pour sérialiser correctement minocRuces = "0" éléments (E.g. éléments qui ne doivent pas exister dans le XML), vous avez besoin d'un BOOL paramètretemplatesPeecified élément de la classe. Voir Stackoverflow.com/Questtions/2330001/ ...



0
votes

Vous pouvez implémenter l'interface ixmlSerializable sur votre classe de rapport et écraser les méthodes ReadxML et WRITOXML.


0 commentaires

-1
votes

Utilisez islamllable = true xxx


0 commentaires

0
votes

J'ai créé la méthode suivante pour corriger le texte XML:

Public Function XMLReaderPatch(rawXML As String) As String
    If String.IsNullOrEmpty(rawXML) Then Return rawXML

     'Pattern for finding items similar to <name*/> where * may represent whitespace followed by text and/or whitespace
     Dim pattern As String = "<(\S+)(\s[^<|>]*)?/>"
     'Pattern for replacing with items similar to <name*></name> where * may represent whitespace followed by text and/or whitespace
     Dim replacement As String = "<$1$2></$1>"
     Dim rgx As New Text.RegularExpressions.Regex(pattern)

     Return rgx.Replace(rawXML, replacement)
 End Function


0 commentaires