Объекты C # для десериализации ответа JSON от HERE Maps API - PullRequest
0 голосов
/ 03 февраля 2019

Я только начинаю смотреть на REST API с помощью HERE Maps.У меня есть некоторый опыт программирования на C # / .NET, но не очень с доступом к API REST.Мне удалось успешно вызвать HERE Maps WebService и получить данные JSON, но я пытаюсь найти наилучший способ получения необходимой информации из этих данных.Я думаю, что мне нужно использовать десериализацию, но для этого требуется создание подходящего объекта C # для десериализации.Я надеялся, что где-то есть хранилище, где я мог бы найти эти объекты, вместо того, чтобы разрабатывать их с нуля, но ничего не могу найти.Любые предложения с благодарностью приняты.

Спасибо,

Крис.

Json ответ:

{
"Response":{
  "MetaInfo":{
     "Timestamp":"2019-02-03T20:41:00.395+0000"
  },
  "View":[
     {
        "_type":"SearchResultsViewType",
        "ViewId":0,
        "Result":[
           {
              "Relevance":1.0,
              "MatchLevel":"postalCode",
              "MatchQuality":{
                 "PostalCode":1.0
              },
              "Location":{
                 "LocationId":"NT_CwZliV687TLYW4ZZKm4VNA",
                 "LocationType":"point",
                 "DisplayPosition":{
                    "Latitude":50.8082,
                    "Longitude":-0.39127
                 },
                 "NavigationPosition":[
                    {
                       "Latitude":50.8082,
                       "Longitude":-0.39127
                    }
                 ],
                 "MapView":{
                    "TopLeft":{
                       "Latitude":50.82169,
                       "Longitude":-0.41262
                    },
                    "BottomRight":{
                       "Latitude":50.79471,
                       "Longitude":-0.36992
                    }
                 },
                 "Address":{
                    "Label":"BN11 3PQ, Worthing, England, United Kingdom",
                    "Country":"GBR",
                    "State":"England",
                    "County":"West Sussex",
                    "City":"Worthing",
                    "PostalCode":"BN11 3PQ",
                    "AdditionalData":[
                       {
                          "value":"United Kingdom",
                          "key":"CountryName"
                       },
                       {
                          "value":"England",
                          "key":"StateName"
                       },
                       {
                          "value":"West Sussex",
                          "key":"CountyName"
                       }
                    ]
                 }
              }
           }
        ]
     }
  ]
}
}

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Большое спасибо всем комментариям.Ваши предложения были отправлены для дальнейшего использования.В конце концов, поскольку мне нужно было получить доступ только к нескольким частям информации, все преобразование в объект казалось немного излишним, поэтому вместо этого я получил результат в XML и использовал несколько методов XML (GetElementsByTagName и ChildNodes)чтобы извлечь узлы, которые я хотел.Но еще раз спасибо за ваши предложения, и я уверен, что буду использовать по крайней мере некоторые из них в будущем:)

Крис.

0 голосов
/ 03 февраля 2019

Вы можете выбрать JSON и вставить классы C # в Visual Studio: Edit -> Paste Special -> Paste JSON as classes.

Затем добавьте пакет NuGet Newtonsoft.Json для решения и десериализации JSON для объекта, он будет выглядеть как:

using Newtonsoft.Json;
using System;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            string json = "";//download json

            Rootobject obj = JsonConvert.DeserializeObject<Rootobject>(json);

            DateTime tt = obj.Response.MetaInfo.Timestamp;
        }
    }    

    public class Rootobject
    {
        public Response Response { get; set; }
    }

    public class Response
    {
        public Metainfo MetaInfo { get; set; }
        public View[] View { get; set; }
    }

    public class Metainfo
    {
        public DateTime Timestamp { get; set; }
    }

    public class View
    {
        public string _type { get; set; }
        public int ViewId { get; set; }
        public Result[] Result { get; set; }
    }

    public class Result
    {
        public float Relevance { get; set; }
        public string MatchLevel { get; set; }
        public Matchquality MatchQuality { get; set; }
        public Location Location { get; set; }
    }

    public class Matchquality
    {
        public float PostalCode { get; set; }
    }

    public class Location
    {
        public string LocationId { get; set; }
        public string LocationType { get; set; }
        public Displayposition DisplayPosition { get; set; }
        public Navigationposition[] NavigationPosition { get; set; }
        public Mapview MapView { get; set; }
        public Address Address { get; set; }
    }

    public class Displayposition
    {
        public float Latitude { get; set; }
        public float Longitude { get; set; }
    }

    public class Mapview
    {
        public Topleft TopLeft { get; set; }
        public Bottomright BottomRight { get; set; }
    }

    public class Topleft
    {
        public float Latitude { get; set; }
        public float Longitude { get; set; }
    }

    public class Bottomright
    {
        public float Latitude { get; set; }
        public float Longitude { get; set; }
    }

    public class Address
    {
        public string Label { get; set; }
        public string Country { get; set; }
        public string State { get; set; }
        public string County { get; set; }
        public string City { get; set; }
        public string PostalCode { get; set; }
        public Additionaldata[] AdditionalData { get; set; }
    }

    public class Additionaldata
    {
        public string value { get; set; }
        public string key { get; set; }
    }

    public class Navigationposition
    {
        public float Latitude { get; set; }
        public float Longitude { get; set; }
    }
}
...