2016-11-07 3 views
2

J'ai créé un projet Silverlight pour Windows Phone 8 une liste de tuple avec un GeoCoordinate et une valeur courte à l'intérieur. Pour le faire, je créé une classe TupleList:Json désérialiser problème avec tuple

public class TupleList<T1, T2> : List<Tuple<T1, T2>> 
{ 
    public void Add(T1 item, T2 item2) 
    { 
     Add(new Tuple<T1, T2>(item, item2)); 
    } 
} 

et je suis donc en mesure de créer mon tuple comme ceci:

new Tuple<GeoCoordinate, short> TupleName; 

À l'étape suivante, je veux écrire dans un fichier txt/JSON et cela fonctionne aussi bien:

string Json = JsonConvert.SerializeObject(TupleName); 
... 
System.Text.Encoding.UTF8.GetBytes(Json.ToCharArray()); 

mais maintenant mon problème est de charger à nouveau ce fichier et désérialiser à nouveau et je suis à la recherche d'une solution:

string TestString = streamReader.ReadLine(); 
Tuple<GeoCoordinate, short> TestTuple; 
TestTuple = JsonConvert.DeserializeObject<Tuple<GeoCoordinate, short>>(TestString); 
ListBox_WayPoints.Items.Add(TestTuple); 

Jusqu'au ReadLine() il fonctionne comme prévu et je reçois une chaîne comme "Item1: 'GeoCoordinate stuff', Item2: 'short value'" mais la méthode est toujours JsonConvert.DeserializeObject<Tuple<GeoCoordinate, short>> s'écraser et je ne sais pas pourquoi parce que le débogueur est simplement sauter à un Debugger Breakpoint et toute erreur le message est:

Ausnahme ausgelöst: "Newtonsoft.Json.JsonSerializationException" in Newtonsoft.Json.DLL 
Ausnahme ausgelöst: "Newtonsoft.Json.JsonSerializationException" in mscorlib.ni.dll 

Je cherche maintenant des exemples/aider à ce problème (malheureusement je n'étais pas encore réussi) comment il est possible de désérialiser la chaîne correctement.

+0

Mettez un essayez/attrapez le bloc de code qui appelle 'JsonConvert.DeserializeObject'. Mettez-le dans les quatre lignes de ce bloc que vous avez cité dans votre question. Mettez un point d'arrêt dans le 'catch', et voyez quelle est la propriété' Message' de l'exception. C'est le message d'erreur. Cela vous aidera à comprendre ce qui ne va pas. –

Répondre

2

Ok au bout de 2 heures, je trouve la réponse: D

la question est que je m'y attendais un tuple mais ce que je suis arrivé étais déjà un TupleList donc toute la magie est:

string TestString = streamReader.ReadLine(); 
NewRoute = JsonConvert.DeserializeObject<TupleList<GeoCoordinate, short>>(TestString);