Использование WCF DataContractJsonSerializer в.NET 3.5
Я пытаюсь использовать код геокодирования отсюда на моем сайте ASP.NET MVC 2. К сожалению, часть этого кода, в частности использование DataContractJsonSerializer, возможна только через.NET 4.0. Поскольку мой хостинг-провайдер не поддерживает.NET 4, я вынужден реализовать эту функцию в.NET 3.5.
Как я могу переработать код (который я разместил ниже) для работы в.NET 3.5?
API геокодирования Карт Google также может возвращать 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; }
}
}
}
}
1 ответ
Какова конкретная проблема, которую вы решаете?
Без более подробной информации трудно диагностировать точную проблему, но DataContractJsonSerializer
доступно в.NET 3.5 - вам нужно вручную добавить ссылку на System.ServiceModel.Web.dll.
(Обратите внимание, что документация MSDN вводит в заблуждение, что DataContractJsonSerializer
можно найти в System.Runtime.Serialization.dll. Хотя это верно для.NET 4, версия.NET 3.5 DataContractJsonSerializer
на самом деле живет в System.ServiceModel.Web.dll.)