如何将JSON输出反序列化为C#Struct(基于调用Google Maps API的返回)

如何将JSON输出反序列化为C#Struct(基于调用Google Maps API的返回),c#,json,google-maps,C#,Json,Google Maps,第一次以新手的身份在这里发帖,如果我没有以正确的方式发帖,我深表歉意 我有一个结构来保存.NETMVC5项目中的地理坐标 public struct GeoCoordinate { private readonly double latitude; private readonly double longitude; public double Latitude { get { return latitude; } }

第一次以新手的身份在这里发帖,如果我没有以正确的方式发帖,我深表歉意

我有一个结构来保存.NETMVC5项目中的地理坐标

   public struct GeoCoordinate
    {
        private readonly double latitude;
        private readonly double longitude;

        public double Latitude { get { return latitude; } }
        public double Longitude { get { return longitude; } }

        public GeoCoordinate(double latitude, double longitude)
        {
            this.latitude = latitude;
            this.longitude = longitude;
        }

        public override string ToString()
        {
            return string.Format("{0},{1}", Latitude, Longitude);
        }
    }
我试图在Post-Create方法上调用一个方法,用GoogleMaps API提供的位置坐标填充坐标值,该API提供了一个JSON格式的数据流

public GeoCoordinate GEOCodeAddress(String Address)
    {
        var address = String.Format("https://maps.googleapis.com/maps/api/geocode/json?address={0}&sensor=false", Address.Replace(" ", "+"));
        var result = new System.Net.WebClient().DownloadString(address);
        JavaScriptSerializer jss = new JavaScriptSerializer();

        return jss.Deserialize<dynamic>(result);


    }
公共地理坐标地理编码地址(字符串地址)
{
变量地址=字符串。格式(“https://maps.googleapis.com/maps/api/geocode/json?address={0}&sensor=false”,Address.Replace(“,”+”);
var result=new System.Net.WebClient().DownloadString(地址);
JavaScriptSerializer jss=新的JavaScriptSerializer();
返回jss.Deserialize(结果);
}
我可以“看到”结果中包含JSON,其中包含(在许多其他属性中)我希望返回的位置坐标,我只是在语法上有问题,无法“解析”这些位置属性并将它们返回到我的create方法

在JSON可视化程序中,坐标位于JSON[0].geometry.location.lat和JSON[0].geometry.location.lng中,我猜(?!)JSON[0].geometry.location包含一个应该与我的结构兼容(ish)的对象。如有必要,我很乐意修改结构以使其兼容


提前感谢您提供的任何帮助/见解

查看该URL返回的JSON,需要反序列化为对象的类如下所示(获取此代码的最简单方法是将JSON复制到剪贴板,然后在Visual Studio中,编辑菜单,粘贴特殊内容,然后选择粘贴为JSON类):

要将数据放入其中一个对象,只需执行以下操作(使用Json.Net):

RootObject googleData=JsonConvert.DeserializeObject(结果);

嗨,经过一些实验,我终于发现我可以用下面的语法来解析它。很可能有一个不太详细的版本,但这是有效的

     public GeoCoordinate GEOCodeAddress(String Address)
    {
        var address = String.Format("https://maps.googleapis.com/maps/api/geocode/json?address={0}&sensor=false", Address.Replace(" ", "+"));
        var result = new System.Net.WebClient().DownloadString(address);
        JavaScriptSerializer jss = new JavaScriptSerializer();
        RootObject googleData = JsonConvert.DeserializeObject<RootObject>(result);
        GeoCoordinate coordinates = new GeoCoordinate();
        coordinates.Latitude= googleData.results[0].geometry.location.lat;
        coordinates.Longitude= googleData.results[0].geometry.location.lng;
        return coordinates;
公共地理坐标地理编码地址(字符串地址)
{
变量地址=字符串。格式(“https://maps.googleapis.com/maps/api/geocode/json?address={0}&sensor=false”,Address.Replace(“,”+”);
var result=new System.Net.WebClient().DownloadString(地址);
JavaScriptSerializer jss=新的JavaScriptSerializer();
RootObject googleData=JsonConvert.DeserializeObject(结果);
地理坐标=新的地理坐标();
坐标.Latitude=googleData.results[0].geometry.location.lat;
coordinates.Longitude=googleData.results[0].geometry.location.lng;
返回坐标;

非常感谢David。我需要添加所有这些类,还是只添加我感兴趣的反序列化类?我个人会将它们全部添加,最好现在将所有内容序列化,你永远不知道将来会使用什么。谢谢David-这真的很有帮助。抱歉(我对此很陌生)但是你能给我一些关于如何设置RootObject googleData=JsonConvert.DeserializeObject(result)这一行以检索Json输出中的Location对象的指针吗。
RootObject googleData = JsonConvert.DeserializeObject<RootObject>(result);
     public GeoCoordinate GEOCodeAddress(String Address)
    {
        var address = String.Format("https://maps.googleapis.com/maps/api/geocode/json?address={0}&sensor=false", Address.Replace(" ", "+"));
        var result = new System.Net.WebClient().DownloadString(address);
        JavaScriptSerializer jss = new JavaScriptSerializer();
        RootObject googleData = JsonConvert.DeserializeObject<RootObject>(result);
        GeoCoordinate coordinates = new GeoCoordinate();
        coordinates.Latitude= googleData.results[0].geometry.location.lat;
        coordinates.Longitude= googleData.results[0].geometry.location.lng;
        return coordinates;