2011-01-18 4 views
8

J'ai un fichier XML que je deserialize, le plus drôle est le fichier XML est le est sérialisé en utilisant le code suivant:erreur Désérialisation dans le document XML (1,1)

enter code here 
var serializer = new XmlSerializer(typeof(CommonMessage)); 
var writer = new StreamWriter("OutPut.txt"); 
serializer.Serialize(writer, commonMessage); 
writer.Close(); 

Et Im essayant de désérialisé à nouveau pour vérifier si la sortie correspond à l'entrée. de toute façon ici est mon code désérialiser:

var serializer = new XmlSerializer(typeof(CommonMessage)); 
var reader = new StringReader(InputFileName); 
CommonMessage commonMessage = (CommonMessage)serializer.Deserialize(reader); 
+3

Avez-vous sérialisé à l'aide d'un encodage et essayent maintenant de désérialiser avec un autre encodage? – Oded

+0

non voici ce que j'utilise le sérialiseur var sérialisé = new XmlSerializer (typeof (CommonMessage)); var writer = new StreamWriter ("OutPut.txt"); serializer.Serialize (writer, commonMessage); writer.Fermer(); – jprbest

+0

@jprbest - si vous souhaitez ajouter des informations, veuillez _edit_ la question et ajouter les détails à la place d'un commentaire. – Oded

Répondre

23

Remplacer StringReader avec StreamReader et cela fonctionnera très bien. StringReader lit la valeur de la chaîne (qui est le nom du fichier dans votre cas).

+2

c'était le problème parce que le lecteur/enregistreur de flux encode/décode en utilisant UTF 8 tandis que le lecteur de chaîne/écrivain encode/décode usng UTF 16 – jprbest

+0

Alors merci beaucoup pour cela! C'est une erreur si subtile, à coup sûr vous pouvez la chercher longtemps sans trouver le problème ... – JoeFox

0

Je viens d'avoir le même message d'erreur mais une source d'erreur différente. Au cas où quelqu'un a le même problème que moi. J'ai coupé le tout premier char de ma chaîne de xml en séparant des chaînes. Et la chaîne XML a été corrompu:

"?xml version="1.0" encoding="utf-16"?> ..." // my error 
"<?xml version="1.0" encoding="utf-16"?> ..." // correct 

(1,1) signifie essentiellement premier caractère de la première ligne est incorrecte et la chaîne ne peut pas être désérialisé.

0

inclure dans votre classe CommonMessage l'étiquette d'élément XmlRoot avec votre XMLRacine par exemple: [XmlRoot (« UIIVerificationResponse »)]

Questions connexes