Я пытаюсь получить маршруты проезда через службы BEST RING Maps. Ответ, похоже, проходит, но при десериализации в JSON с предоставленными Контрактами данных возникает следующее исключение:
Элемент ': элемент' содержит данные от типа, который сопоставляется с именем ' http://schemas.microsoft.com/search/local/ws/rest/v1:Route '. Deserializer не знает ни одного типа, который сопоставляется с этим именем. Подумайте об использовании DataContractResolver или добавьте тип, соответствующий "Маршруту" в список известных типов, например, используя атрибут 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 Maps знает об этом и вскоре обновит документацию. Проблема в том, что возвращается новый объект, где, как и раньше, мы знали только имя свойства. У меня есть обновленный набор контрактов данных в одном из моих проектов, который вы можете найти здесь: http://mapstoolbox.codeplex.com/SourceControl/latest#Microsoft.Maps.Spatialtoolbox/Source/Microsoft.Maps.SpatialToolbox.Core/Bing/Services/RestServices.cs
Этот поток в MSDN подтверждает, что исходные классы от Microsoft не работают. Но если вы просто создаете свой собственный класс с помощью json2csharp.com и используете его для десериализации, он работает.
Том