我正在编写一种方法,该方法采用英国邮政编码并将此邮政编码的纬度和经度作为"位置"对象
public class Location
{
public double Longitude;
public double Latitude;
}
我正在使用来自https://postcodes.io/的API,它采用邮政编码并返回相当大的数据集。例如(白金汉宫,如果你感兴趣的话):
{
"status": 200,
"result": {
"postcode": "SW1A 1AA",
"quality": 1,
"eastings": 529090,
"northings": 179645,
"country": "England",
"nhs_ha": "London",
"longitude": -0.141587597876975,
"latitude": 51.5010091564599,
"european_electoral_region": "London",
"primary_care_trust": "Westminster",
"region": "London",
"lsoa": "Westminster 018C",
"msoa": "Westminster 018",
"incode": "1AA",
"outcode": "SW1A",
"parliamentary_constituency": "Cities of London and Westminster",
"admin_district": "Westminster",
"parish": "Westminster, unparished area",
"admin_county": null,
"admin_ward": "St James's",
"ccg": "NHS Central London (Westminster)",
"nuts": "Westminster",
"codes": {
"admin_district": "E09000033",
"admin_county": "E99999999",
"admin_ward": "E05000644",
"parish": "E43000236",
"parliamentary_constituency": "E14000639",
"ccg": "E38000031",
"nuts": "UKI32"
}
}
}
目前我已将其设置为通过使用Visual Studio" Paste Special>生成数据类来获取数据。将JSON粘贴为类"功能,然后使用JSON.Net反序列化整个数据集,然后使用结果对象的纬度和经度创建一个新的Location对象。
Rootobject locationData = JsonConvert.DeserializeObject<Rootobject>(content);
Location locationToReturn = new Location()
{
Latitude = locationData.result.latitude,
Longitude = locationData.result.longitude
};
当我只想要两个字段时,我必须完成反序列化整个事情的工作,这对我来说似乎很愚蠢。
所以问题是:
我可以只反序列化纬度和经度字段吗?
更具体地说,我可以将纬度和经度字段直接反序列化为我的Location类的新实例吗?
答案 0 :(得分:1)
您可以将数据加载到动态对象中。 然后从那里阅读。
dynamic locationData = JsonConvert.DeserializeObject<dynamic>(content);
Location locationToReturn = new Location()
{
Latitude = locationData.result.latitude,
Longitude = locationData.result.longitude
};
Console.WriteLine("Latitude: " + locationToReturn.Latitude);
Console.WriteLine("Longitude: " + locationToReturn.Longitude);
Console.ReadLine();
通过这种方式,您可以获取其他列或值,而无需枚举所有字段。
答案 1 :(得分:1)
你可以使用这样的JObject
做你想做的事:
Location locationData = JObject.Parse(content)["result"].ToObject<Location>();
小提琴:https://dotnetfiddle.net/vWwLUf
或者只是更改Rootobject
类的类定义:
class Rootobject
{
[JsonProperty("result")]
public Location Location { get; set; }
}
然后你可以这样做:
Location locationData = JsonConvert.DeserializeObject<Rootobject>(content).Location;
答案 2 :(得分:0)
你可以使用Newtonsoft.Json(Json.Net)自己遍历json对象,只获取你需要的值。
您可能希望使用JObject来捕获整个结果。转到result
的子令牌,然后获取经度和纬度的子项,并根据需要进行反序列化。