![](/img/trans.png)
[英]How to search Latitude and Longitude based record from SQL Server use Asp.net MVC and C#
[英]How can I parse just the latitude and longitude information from a JSON string in C# ASP.NET?
我到处都是,找不到解决此问题的解决方案。
我正在使用Google Maps API,需要输入一个地址,将其转换为纬度/经度,然后使用这些值生成我的地图。
我正在使用NewtonSoft.Json尝试对字符串进行反序列化,但是我尝试的每种方法都会遇到不同的错误。
这是我访问JSON的方式:
var webClient = new WebClient();
var json = webClient.DownloadString(@"https://maps.googleapis.com/maps/api/geocode/json?address=1600%20Pennsylvania%20Ave%20NW,%20Washington,%20DC%2020500&key=AIzaSyAKORLziVDRpaIlRs7NrPwGsye9NNn6Mdw");
现在,我仅将静态地址用于调试目的,但是稍后将切换至变量。
我知道这是正确导入的,因为我正在使用System.Diagnostics.Debug.WriteLine("json "+json);
检查和调试。
我还通过https://jsonlint.com/确认了它是有效的JSON。
所以现在,我需要反序列化此String才能抓取
"location" : { "lat" : 38.8976633, "lng" : -77.03657389999999
并将它们保存到变量中以供以后访问。
我想不参加整个课程就这样做,但是如果那是我可以做的,那就可以管理。
谁能帮我格式化JsonConvert.DeserializeObject()
命令来解决这个问题?
您可以使用JSON.net来反序列化部分JSON片段, 这是您要实现的示例,这是您的案例的代码。
var webClient = new WebClient();
string json = webClient.DownloadString(@"https://maps.googleapis.com/maps/api/geocode/json?address=1600%20Pennsylvania%20Ave%20NW,%20Washington,%20DC%2020500&key=AIzaSyAKORLziVDRpaIlRs7NrPwGsye9NNn6Mdw");
JObject jsonOb = JObject.Parse(json);
double lat = jsonOb["results"]["geometry"]["location"]["lat"];
double lng = jsonOb["results"]["geometry"]["location"]["lng"];
首先,您需要为json定义c#类。 这不是手动工作。 将所有json复制到剪贴板。 然后转到Visual Studio,打开创建带有类的新.cs文件,然后打开Edit->Paster special->Paste JSON as Classes
。 您的情况将是这些课程
public class Rootobject
{
public Result[] results { get; set; }
public string status { get; set; }
}
public class Result
{
public Address_Components[] address_components { get; set; }
public string formatted_address { get; set; }
public Geometry geometry { get; set; }
public string place_id { get; set; }
public string[] types { get; set; }
}
public class Geometry
{
public Bounds bounds { get; set; }
public Location location { get; set; }
public string location_type { get; set; }
public Viewport viewport { get; set; }
}
public class Bounds
{
public Northeast northeast { get; set; }
public Southwest southwest { get; set; }
}
public class Northeast
{
public float lat { get; set; }
public float lng { get; set; }
}
public class Southwest
{
public float lat { get; set; }
public float lng { get; set; }
}
public class Location
{
public float lat { get; set; }
public float lng { get; set; }
}
public class Viewport
{
public Northeast1 northeast { get; set; }
public Southwest1 southwest { get; set; }
}
public class Northeast1
{
public float lat { get; set; }
public float lng { get; set; }
}
public class Southwest1
{
public float lat { get; set; }
public float lng { get; set; }
}
public class Address_Components
{
public string long_name { get; set; }
public string short_name { get; set; }
public string[] types { get; set; }
}
然后您可以基于此类对它进行反序列化
var webClient = new WebClient();
var json = webClient.DownloadString(@"https://maps.googleapis.com/maps/api/geocode/json?address=1600%20Pennsylvania%20Ave%20NW,%20Washington,%20DC%2020500&key=AIzaSyAKORLziVDRpaIlRs7NrPwGsye9NNn6Mdw");
var parsedObj = JsonConvert.DeserializeObject<Rootobject>(json);
var location = parsedObj.results?[0].geometry?.location;
Console.WriteLine(location.lat);
Console.WriteLine(location.lng);
最好使一个对象将JSON转换为。 但是您可以使用无类型的对象。
var outputObject = JsonConvert.DeserializeObject(JsonString)
为转换对象转换为对象时,请执行以下操作:
Type outputObject = JsonConvert.DeserializeObject<Type>(jsonstring);
这对我有用
var webClient = new WebClient();
var json = webClient.DownloadString(@"https://maps.googleapis.com/maps/api/geocode/json?address=1600%20Pennsylvania%20Ave%20NW,%20Washington,%20DC%2020500&key=AIzaSyAKORLziVDRpaIlRs7NrPwGsye9NNn6Mdw");
var obj = JsonConvert.DeserializeObject<dynamic>(json);
Console.WriteLine(obj.results[0].geometry.bounds.northeast.lat.Value);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.