2014-07-24 40 views
1

我試圖通過必應地圖REST服務獲取駕車路線。響應似乎是想通過,但所提供的數據反序列化到JSON當合同後拋出以下異常:必應地圖REST服務JSON反序列化錯誤

元素「:項目」包含映射到名稱爲「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; 
     } 
    } 

有什麼想法?

+0

這方面的進展如何? 我注意到同樣的問題 [這裏] [1]。 湯姆 [1]:http://stackoverflow.com/questions/25297238/bing-rest-api-get-route-from-response-resourcesets – Tom

+0

@湯姆沒有......我們使用Telerik的。相反,我能夠通過他們獲取駕車路線。我還沒有嘗試過這種方法,所以現在不能提供任何進一步的信息。 – Matt

回答

1

必應地圖團隊知道這一點,並且即將更新文檔。問題是正在返回一個新對象,因爲之前我們只知道屬性名稱。我在其中一個項目中有一組更新的數據合同,您可以在這裏找到:http://mapstoolbox.codeplex.com/SourceControl/latest#Microsoft.Maps.Spatialtoolbox/Source/Microsoft.Maps.SpatialToolbox.Core/Bing/Services/RestServices.cs

+0

通過MSDN站點某處的鏈接即將提供更新文檔的信息,還是您從私人支持服務單中獲取了您的信息? – Matt

+0

我在Bing地圖團隊中,並根據我在服務響應中看到的內容創建了數據合同文檔。我不在工程團隊,也沒有創建服務,必須通過反覆試驗來弄清楚數據合同。 – rbrundritt

+0

Gotcha。我重試了該鏈接中datacontracts的JSON請求,並得到了相同的結果。我能夠通過XML成功完成請求,但是當試圖從ResourceSets [0] .Resources [0]分配路由時,資源[0]始終爲空。我可以在XML輸出中看到路由的所有細節。 – Matt

0

This thread at MSDN證實,來自Microsoft的原始類不起作用。但是,如果你只是用json2csharp.com生成你自己的classen,並使用那個反序列化它正在工作。

Tom