Bing Maps REST сервисы Ошибка десериализации JSON

Я пытаюсь получить маршруты проезда через службы Bing Maps 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;
        }
    }

Есть предположения?


person Matt    schedule 24.07.2014    source источник
comment
Есть ли прогресс в этом? Я заметил ту же проблему [здесь][1]. Том [1]: stackoverflow.com/questions/25297238/   -  person Tom    schedule 14.08.2014
comment
@ Том, нет ... Мы используем Telerik. Вместо этого я смог получить маршруты проезда через них. Я не пробовал этот метод снова, поэтому сейчас не могу ничего сообщить.   -  person Matt    schedule 14.08.2014


Ответы (2)


Команда Bing Maps знает об этом и скоро обновит документацию. Проблема в том, что возвращается новый объект, тогда как раньше мы знали только имя свойства. У меня есть обновленный набор контрактов данных в одном из моих проектов, который вы можете найти здесь: http://mapstoolbox.codeplex.com/SourceControl/latest#Microsoft.Maps.Spatialtoolbox/Source/Microsoft.Maps.SpatialToolbox.Core/Bing/Services/RestServices.cs

person rbrundritt    schedule 24.07.2014
comment
Доступна ли информация о том, что обновленная документация скоро будет доступна по ссылке где-то на сайте MSDN, или вы получили информацию из частного обращения в службу поддержки? - person Matt; 24.07.2014
comment
Я работаю в команде Bing Maps и создал документацию по контракту данных на основе того, что я видел в ответах от служб. Я не был в команде инженеров и не создавал сервисы, и мне приходилось выяснять контракты данных методом проб и ошибок. - person rbrundritt; 25.07.2014
comment
Попался. Я повторил запрос JSON из контрактов данных в этой ссылке и получил тот же результат. Мне удалось успешно выполнить запрос через XML, но при попытке назначить маршрут из ResourceSets[0].Resources[0] Resources[0] всегда имеет значение null. Я вижу все детали маршрута в выводе XML. - person Matt; 25.07.2014

Эта ветка на MSDN подтверждает, что оригинальные классы от Microsoft не работают. Но если вы просто создадите свой собственный classen с json2csharp.com и используете его для десериализации, он работает.

Том

person Tom    schedule 15.08.2014