【发布时间】:2016-11-07 16:00:34
【问题描述】:
我为 Windows Phone 8 创建了一个 silverlight 项目,其中包含一个包含 GeoCoordinate 和一个短值的元组列表。 为此,我创建了一个 TupleList 类:
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
所以我现在正在寻找有关此问题的示例/帮助(不幸的是我还没有成功)如何正确反序列化字符串。
【问题讨论】:
-
在调用
JsonConvert.DeserializeObject的代码块周围放置一个try/catch。把它放在你在问题中引用的那个块的整个四行。在catch中放一个断点,看看异常的Message属性是什么。那是错误信息。它将帮助您了解问题所在。
标签: c# json silverlight windows-phone-8 deserialization