【发布时间】:2010-07-05 09:00:00
【问题描述】:
我正在尝试在我的 ASP.NET MVC 2 站点中使用此处的地理编码代码。不幸的是,其中一些代码,特别是 DataContractJsonSerializer 的使用,只能通过 .NET 4.0 实现。由于我的托管服务提供商不支持 .NET 4,我不得不在 .NET 3.5 中实现该功能。
如何修改代码(我已在下面重新发布)以在 .NET 3.5 中工作?
如果在 3.5 中更容易序列化,Google Maps Geocoding API 也可以返回 XML...
下面是我尝试从 .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; }
}
}
}
}
【问题讨论】:
标签: c# .net wcf .net-3.5 datacontractserializer