Использование 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}&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; }
                        }
                }
        }
}

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.)

Другие вопросы по тегам