Использование WCF DataContractJsonSerializer в .NET 3.5 - PullRequest
2 голосов
/ 05 июля 2010

Я пытаюсь использовать код геокодирования здесь, на моем сайте 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 Ответ

16 голосов
/ 05 июля 2010

В чем конкретно заключается проблема, с которой вы столкнулись?

Без подробностей трудно точно определить точную проблему, но DataContractJsonSerializer доступно в .NET 3.5 - выВам нужно будет вручную добавить ссылку на System.ServiceModel.Web.dll .

(Обратите внимание, что документация MSDN вводит в заблуждение, что DataContractJsonSerializer можно найти в System.Runtime.Serialization.dll . Хотя это верно для .NET 4, версия DataContractJsonSerializer .NET 3.5 на самом деле находится в System.ServiceModel.Web.dll .)

...