【问题标题】:WebService JSON query exceptionWebService JSON 查询异常
【发布时间】:2015-01-17 14:12:22
【问题描述】:
async private void webServiceGetPoints()
    {
        var client = new HttpClient();
        var response = await client.GetAsync(new Uri("//private//"));
        var result = await response.Content.ReadAsStringAsync();

        JArray jsonVal = JArray.Parse(result) as JArray;
        dynamic taglist = jsonVal;

        foreach (dynamic tag in taglist)
        {
            Collection.Add(new Tag(tag.name, tag.description, tag.longitude, tag.latitude));
        }
    }

我的代码有问题。当我将此 GET 查询设置为 serwer 时,它会返回一个 json。我尝试使用 JSON.NET 将其解析为类,但是当我这样做时,它会引发异常。我不知道有一个,因为它打开了 App.h.cs 文件并突出显示该行: if (global::System.Diagnostics.Debugger.IsAttached) global::System.Diagnostics.Debugger.Break();

【问题讨论】:

  • 如果您不知道什么异常...可以全部发布吗?否则很难知道发生了什么......
  • 问题出在:foreach(taglist中的动态标签) { Collection.Add(new Tag(tag.name, tag.description, tag.longitude, tag.latitude)); }
  • 看起来无法使用 is ObservableCollection 将 Tag 添加到集合中
  • @Criss 如果您可以发布确切的例外情况?
  • 这不是一个正常的例外。 Visual Studio 为我打开一个 App.i.cs 文件并突出显示以下行: global::System.Diagnostics.Debugger.Break();就是这样

标签: c# json web-services windows-store-apps windows-phone-8.1


【解决方案1】:

您正在将动态值传递给您的 Tag 类构造函数。那里的某些值可能无法转换为您的类所期望的任何值(可能它们为空,甚至不存在)。

您可以使用 Json.Net 之类的类型转换器:

class TagData
{
    public string name { get; set; }
    public int longitude { get; set; }
    //...
}

var item JsonConvert.DeserializeObject<List<TagData>>(result);

尤其是来自网络服务的数据,您永远不应依赖动态数据,而应始终使用检查正确转换的方法。

【讨论】:

    猜你喜欢
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-20
    • 2011-04-21
    • 2018-04-07
    • 2018-07-12
    相关资源
    最近更新 更多