.net 如何使用Linq从Google地理编码中获取城市信息
我有一个来自谷歌地理编码API的JSON blob,其中包含一个城市的名称。我只是在寻找linq表达式来表达出来 JSON: 以下是我的标准: 给定“结果”中的“结果”,结果“类型”包含“位置”.net 如何使用Linq从Google地理编码中获取城市信息,.net,json,linq,.net,Json,Linq,我有一个来自谷歌地理编码API的JSON blob,其中包含一个城市的名称。我只是在寻找linq表达式来表达出来 JSON: 以下是我的标准: 给定“结果”中的“结果”,结果“类型”包含“位置” 对于结果,我希望“address\u components”中的项,其中“types”包含“locality” 更新: 这是可行的,但似乎可以更简洁: if (responseObject["results"].Children().Count() > 0) {
对于结果,我希望“address\u components”中的项,其中“types”包含“locality” 更新: 这是可行的,但似乎可以更简洁:
if (responseObject["results"].Children().Count() > 0)
{
var postalResult = responseObject["results"].Children().FirstOrDefault((result) =>
{
return result["types"].Children().Contains("locality");
});
if(postalResult !=null)
{
var addressComponent = postalResult["address_components"].FirstOrDefault((ac) =>
{
return ac["types"].Children().Contains("locality");
});
if(addressComponent != null)
{
cityFromGoogle = addressComponent["long_name"].Value<string>().ToLower();
}
}
}
if(responseObject[“results”].Children().Count()>0)
{
var postalResult=responseObject[“结果”].Children().FirstOrDefault((结果)=>
{
返回结果[“类型”]。Children()包含(“位置”);
});
if(postalResult!=null)
{
var addressComponent=postalResult[“地址组件”]。FirstOrDefault((ac)=>
{
返回ac[“types”].Children().Contains(“locality”);
});
if(addressComponent!=null)
{
cityFromGoogle=addressComponent[“long_name”].Value().ToLower();
}
}
}
如果将json转换为具体的类,则可以轻松地处理它们
var resp = JsonConvert.DeserializeObject<Google.Response>(json);
var addresses = resp.results.Where(x => x.address_components.Any(a => a.types.Contains("locality")))
.ToList();
var resp=JsonConvert.DeserializeObject(json);
var address=resp.results.Where(x=>x.address\u components.Any(a=>a.types.Contains(“locality”))
.ToList();
公共类谷歌
{
公共类地址组件
{
公共字符串长_名称{get;set;}
公共字符串短_名称{get;set;}
公共列表类型{get;set;}
}
公共类位置
{
公共双lat{get;set;}
公共双精度{get;set;}
}
公共类界限
{
公共位置{get;set;}
公共位置{get;set;}
}
公共课几何
{
公共位置位置{get;set;}
公共字符串位置\u类型{get;set;}
公共边界视口{get;set;}
公共边界{get;set;}
}
公开课成绩
{
公共列表地址_组件{get;set;}
公共字符串格式的_地址{get;set;}
公共几何体{get;set;}
公共列表类型{get;set;}
}
公众课堂反应
{
公共列表结果{get;set;}
公共字符串状态{get;set;}
}
}
我本来要走这条路,但我真的只需要一条信息。如果NewtonSoft可以用linq为我处理它,我不想写一堆代码
var resp = JsonConvert.DeserializeObject<Google.Response>(json);
var addresses = resp.results.Where(x => x.address_components.Any(a => a.types.Contains("locality")))
.ToList();
public class Google
{
public class AddressComponent
{
public string long_name { get; set; }
public string short_name { get; set; }
public List<string> types { get; set; }
}
public class Location
{
public double lat { get; set; }
public double lng { get; set; }
}
public class Bounds
{
public Location northeast { get; set; }
public Location southwest { get; set; }
}
public class Geometry
{
public Location location { get; set; }
public string location_type { get; set; }
public Bounds viewport { get; set; }
public Bounds bounds { get; set; }
}
public class Result
{
public List<AddressComponent> address_components { get; set; }
public string formatted_address { get; set; }
public Geometry geometry { get; set; }
public List<string> types { get; set; }
}
public class Response
{
public List<Result> results { get; set; }
public string status { get; set; }
}
}