Max*_*sky 2 .net c# wcf datacontractserializer .net-3.5
我正在尝试使用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; }
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
Luk*_*keH 16
你遇到的具体问题是什么?
如果没有更多的细节很难诊断确切的问题,但是DataContractJsonSerializer
是在.NET 3.5可用-你需要一个参考手动添加到System.ServiceModel.Web.dll.
(请注意,MSDN文档误导性地指出DataContractJsonSerializer
可以在System.Runtime.Serialization.dll中找到.虽然这适用于.NET 4,但.NET 3.5版本DataContractJsonSerializer
实际上存在于System.ServiceModel.Web.dll中.)