在.NET 3.5中使用WCF DataContractJsonSerializer

我正在尝试使用ASP.NET MVC 2站点中的地理编码代码。 不幸的是,一些代码,特别是DataContractJsonSerializer的使用,只能通过.NET 4.0实现 。 由于我的托管服务提供商不支持.NET 4,我不得不在.NET 3.5中实现该function。

我如何重新编写代码(我在下面重新发布)在.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}&region=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在.NET 3.5中可用 – 您需要手动添加对System.ServiceModel.Web.dll的引用。

(请注意,MSDN文档误导性地指出DataContractJsonSerializer可以在System.Runtime.Serialization.dll中找到。虽然这适用于.NET 4,但.NET 3.5版本的DataContractJsonSerializer实际上存在于System.ServiceModel.Web.dll中 。)