Bing Maps REST Toolkit - доступ к объекту RESPONSE - PullRequest
0 голосов
/ 17 января 2020

Я не могу получить доступ к членам в этом недокументированном классе: BingMapsRESTToolkit.Response

Код в разных местах (например) Bing Maps REST Services Toolkit - Значение доступа за пределами делегата похоже копирует нерабочий пример из MSDN.

Например, этот метод не имеет доступа к массиву привязанных координат, содержащемуся в объекте Response. Строка, в которой rez назначается на приведение ответа, дает нам нулевое значение.

private List<Coordinate> MapSnaps(List<Coordinate> coordinates)
{
    // Build our request object
    var req = new SnapToRoadRequest();
    req.BingMapsKey = _sessionKey;
    req.UserRegion = "US";
    req.SpeedUnit = SpeedUnitType.MPH;
    req.TravelMode = TravelModeType.Driving;
    req.Points = coordinates;
    var response = req.Execute().GetAwaiter().GetResult();

    if(response != null &&
       response.ResourceSets != null &&
       response.ResourceSets.Length > 0 &&
       response.ResourceSets[0].Resources != null &&
       response.ResourceSets[0].Resources.Length > 0)
    {
        // rez gets nothing, results in null because the two objects are nothing alike
        var rez = response.ResourceSets[0].Resources[0] as BingMapsRESTToolkit.Location;

        // Snaps has 69 SnappedPoint items, but the member as shown in the debug window
        // SnappedPoints under snaps cant be accessed in code - just in debugger
        var snaps = response.ResourceSets[0].Resources[0]; // 

        Console.WriteLine("-.-"); // <-- breakpoint here

    }

    // TODO: Once we get this response snafu sorted, convert and return
    // matching list of road-snapped coordinates to caller...

    return ConvertToCoords(response);
}

Когда я отлаживаю с помощью Visual Studio 2019, это ясно показывает, что есть 69 значений SnappedPoint, ожидающих использования в response.ResourceSet [0] .Resources [0] - но я не могу получить им. Вот что показывает отладчик:

snaps BingMapsRESTToolkit.SnappedPoint [69]

SnappedPoints   BingMapsRESTToolkit.SnappedPoint[69]
BoundingBox     null
Type            null

Each member of the SnappedPoints array contains:

    Coordinate          {Lat:double, Lon:double}
    Index               int
    Name                String for name of road
    SpeedLimit          double?
    TruckSpeedLimit     double?

Trying: snaps.SnappedPoints [x] не работает как член не существует. Оба BoundingBox и Type доступны и имеют нулевое значение, но я не вижу способа доступа к содержимому SnappedPoints. Там нет intellisense и ручной ввод имени члена только приводит к ошибкам.

WTH, что я здесь не так делаю?

1 Ответ

0 голосов
/ 18 января 2020

Оказывается, решение довольно простое, но, по крайней мере, для меня, оно не подразумевается в (отсутствии) документации для проекта BingMapsRESTToolkit.

Объект Response может принимать различные типы объектов в зависимости от первоначального запроса.

Чтобы получить доступ к массиву SnappedPoints, ответ должен быть приведен к типу SnapToRoadResponse, например:

var snaps = response.ResourceSets[0].Resources[0] as SnapToRoadResponse;

Это довольно уродливо, но работает.

...