我正在尝试在我的 ASP.NET MVC 2 站点中使用此处的地理编码代码。不幸的是,其中一些代码,特别是DataContractJsonSerializer 的使用只能通过 .NET 4.0 实现。由于我的托管提供商不支持 .NET 4,我被迫在 .NET 3.5 中实现该功能。
如何修改代码(我在下面重新发布)以在 .NET 3.5 中工作?
Google Maps Geocoding API 还可以返回 XML,如果在 3.5 中更容易序列化的话...
下面是我尝试从 .NET 4 转换为 .NET 3.5 的代码:
using System;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using System.Net;
using System.Web;
.
.
.
private static GeoResponse CallGeoWS(string address)
{
string url = string.Format(
"http://maps.google.com/maps/api/geocode/json?address={0}®ion=dk&sensor=false",
HttpUtility.UrlEncode(address)
);
var request = (HttpWebRequest)HttpWebRequest.Create(url);
request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate");
request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(GeoResponse));
var res = (GeoResponse)serializer.ReadObject(request.GetResponse().GetResponseStream());
return res;
}
[DataContract]
class GeoResponse
{
[DataMember(Name="status")]
public string Status { get; set; }
[DataMember(Name="results")]
public CResult[] Results { get; set; }
[DataContract]
public class CResult
{
[DataMember(Name="geometry")]
public CGeometry Geometry { get; set; }
[DataContract]
public class CGeometry
{
[DataMember(Name="location")]
public CLocation Location { get; set; }
[DataContract]
public class CLocation
{
[DataMember(Name="lat")]
public double Lat { get; set; }
[DataMember(Name = "lng")]
public double Lng { get; set; }
}
}
}
}
您遇到的具体问题是什么?
如果没有更多细节,很难诊断确切的问题,但是DataContractJsonSerializer
is在 .NET 3.5 中可用 - 您需要手动添加对系统.ServiceModel.Web.dll.
(请注意,MSDN 文档误导性地指出DataContractJsonSerializer
可以在系统.运行时.序列化.dll。虽然 .NET 4 是这样,但 .NET 3.5 版本DataContractJsonSerializer
实际上住在系统.ServiceModel.Web.dll.)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)