2010-08-15 7 views
0

J'écris une petite application de navigation pour Windows Mobile 6.1 (.NET CF 3.5), et je reçois une exception IOException lorsque j'essaie de désérialiser mes données à partir du flux de fichiers, et je ne comprends pas pourquoi. Voici mon code:IOException sur Deserializeling XML

//That's the class I am trying to serialize/deserialize 
public class MapData 
    { 
     [XmlIgnore] 
     public Bitmap EntireMapBitmap { get; set; } 
     public string Date { get; set; } 
     public string FileName { get; set; } 
     public Route NavigationRoute { get; set; } 
     //and some other unrelavant fields... 
    } 

est le code ici pour sérialiser:

string fileNameWithExtension = /*some calculation to get the full path*/ 
XmlSerializer serializer = new XmlSerializer(typeof(MapData)); 
TextWriter textWriter = new StreamWriter(fileNameWithExtension); 
serializer.Serialize(textWriter, mapData); 
textWriter.Close(); 

ici est le code pour désérialisation:

string fullPath = /*Retreive file's full path logic - working OK */; 
XmlSerializer deserializer = new XmlSerializer(typeof(MapData)); 
FileStream fs = new FileStream(fullPath, FileMode.Open); 
mapData = null; 
mapData = (MapData)deserializer.Deserialize(fs); 
fs.Close(); 

Je sais que ce beaucoup de détails , mais à partir de mon interrogation, l'exception se produit seulement quand je fais une utilisation avec la poroperty de NavigationRoute, ainsi j'ajouterai également ces classes liées ...

Comme je l'ai déjà mentionné, c'est seulement après avoir ajouté un ou plusieurs objets à la liste des coordonnées de la Route - je reçois l'exception (ce qui me rend la situation encore plus embarrassante ...). Une autre chose que j'ai essayé de faire pour enlever les setters privés de la classe GeographicCoordinate - mais ce n'était pas bon. Merci à tous :)

+2

Si vous obtenez une exception, vous ne comprenez pas, * toujours * spécifiez le contenu de l'exception. –

+0

@ET, quand vous dites supprimer les setters privés, voulez-vous dire que vous avez supprimé le mot-clé privé ou vous avez supprimé le setter entièrement? XmaSerializer requiert que les deux get/set soient disponibles et publics. –

Répondre

0

vous ne spécifiez pas l'exception réelle, mais je soupçonne que le problème est que votre GeographicCoordinate.LocationOnMap_X et GeographicCoordinate.LocationOnMap_Y ont setters privé, vous aurez besoin d'être public XmlSerialization.

Questions connexes