Объекты C# для десериализации ответа JSON от HERE Maps API
Я только начинаю смотреть на 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 ответа
Вы можете выбрать 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; }
}
}
Большое спасибо за все комментарии. Ваши предложения были отправлены для дальнейшего использования. В конце концов, поскольку мне нужно было получить доступ только к нескольким частям информации, все преобразование в объект казалось немного излишним, поэтому вместо этого я получил результат в XML и использовал несколько методов XML (GetElementsByTagName и ChildNodes) чтобы извлечь узлы, которые я хотел. Но еще раз спасибо за ваши предложения, и я уверен, что буду использовать по крайней мере некоторые из них в будущем:)
Крис.