【问题标题】:Json deserialize issue with tuple元组的Json反序列化问题
【发布时间】: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&lt;Tuple&lt;GeoCoordinate, short&gt;&gt; 方法总是崩溃,我不知道为什么,因为调试器只是跳转到调试器断点和整个错误消息是:

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


【解决方案1】:

2 小时后我找到了答案:D

整个问题是我期待一个 Tuple 但我得到的已经是一个 TupleList 所以整个魔法是:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-23
    • 2021-05-28
    • 1970-01-01
    相关资源
    最近更新 更多