Bing映射REST服务JSON反序列化错误

本文关键字:反序列化 错误 JSON 服务 映射 REST Bing | 更新日期: 2023-09-27 18:14:43

我试图通过必应地图REST服务获得驾驶方向。响应似乎正在进行,但是当使用提供的数据契约反序列化为JSON时,抛出了以下异常:

元素':item'包含映射到名称'http://schemas.microsoft.com/search/local/ws/rest/v1:Route'的类型的数据。反序列化程序不知道映射到该名称的任何类型。考虑使用DataContractResolver或将'Route'对应的类型添加到已知类型列表中——例如,通过使用KnownTypeAttribute属性或将其添加到传递给DataContractSerializer的已知类型列表中。

我正在处理的MSDN链接可在:http://msdn.microsoft.com/en-us/library/jj819168.aspx

我已经从示例底部的链接复制了必要的DataContracts,但是无法弄清楚为什么在反序列化时发生异常。下面是我正在执行的代码:

private async void btnGetRoute_Click(object sender, RoutedEventArgs e)
    {
            string locationFrom = "100 Commonwealth Ave Boston MA";
            string locationTo = "100 Yawkey Way Boston MA";
            string url = string.Format("http://dev.virtualearth.net/REST/V1/Routes/Driving?wp.0={0}&wp.1={1}&key={2}", locationFrom, locationTo, ConfigurationManager.AppSettings["BingMapsKey"]);
            Uri drivingRouteRequest = new Uri(url);
            Response response = await GetResponse(drivingRouteRequest);
    }
    private async Task<Response> GetResponse(Uri uri)
    {
        HttpClient client = new System.Net.Http.HttpClient();
        var response = await client.GetAsync(uri);
        using (var stream = await response.Content.ReadAsStreamAsync())
        {
            DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Response));
            return ser.ReadObject(stream) as Response;
        }
    }

任何想法吗?

Bing映射REST服务JSON反序列化错误

必应地图团队意识到了这一点,并将很快更新文档。问题是返回了一个新对象,而以前我们只知道属性名。我在我的一个项目中有一组更新的数据合同,你可以在这里找到:http://mapstoolbox.codeplex.com/SourceControl/latest#Microsoft.Maps.Spatialtoolbox/Source/Microsoft.Maps.SpatialToolbox.Core/Bing/Services/RestServices.cs

MSDN的这个线程确认,来自微软的原始类不工作。但是如果你只是用json2csharp.com生成你自己的类,并使用这些类来反序列化它是工作的。

汤姆