我正在尝试在我的 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
在 .NET 3.5 中可用 - 您需要手动添加对 的引用System.ServiceModel.Web.dll.
(请注意,MSDN 文档误导性地指出 DataContractJsonSerializer
可以在 System.Runtime.Serialization.dll 中找到。虽然这对于 .NET 4 是正确的,但 . NET 3.5 版本的 DataContractJsonSerializer
实际上存在于 System.ServiceModel.Web.dll 中。)
关于c# - 在 .NET 3.5 中使用 WCF DataContractJsonSerializer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3178218/