2016-11-07 154 views
2

我爲Windows Phone 8創建了一個具有GeoCoordinate和短內部值的元組列表的silverlight項目。 爲了這樣做我創建了一個TupleList類:Json反序列化問題與元組

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

所以我能夠創建我的元組是這樣的:

new Tuple<GeoCoordinate, short> TupleName; 

在下一步我想要寫在一個txt/JSON文件而這個作品也罰款:

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

,但現在我的問題是重新加載該文件,並再次反序列化,我尋找解決的辦法:

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

直到ReadLine(),它正在正如預期,我得到一個字符串像"Item1: 'GeoCoordinate stuff', Item2: 'short value'"JsonConvert.DeserializeObject<Tuple<GeoCoordinate, short>>方法總是崩潰,我不知道爲什麼,因爲調試程序只是跳轉到一個調試器斷點和整個錯誤消息是:

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

所以我現在正在尋找的例子/這個問題(不幸的是我沒有成功尚)它是如何能夠正確地反序列化字符串幫助。

+0

放了嘗試/捕捉調用'JsonConvert.DeserializeObject'的代碼塊。把它放在你提出的問題中引用的整個四行中。在「catch」中放置一個斷點,並查看異常的「Message」屬性是什麼。這是錯誤信息。它會幫助你瞭解什麼是錯的。 –

回答

2

確定在2小時後我找到了答案:d

整個問題是,我期待一個元組,但我得到的是一個已經是TupleList所以整個神奇的是:

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